[Spip] Demande : import/export BD

--- Antoine Pitrou <pitrou@free.fr> a écrit :

Je peux pas faire grand'chose ici, mais je vais essayer de prendre le temps
ce soir. Deux trois trucs si tu continues d'ici là : pour lire un fichier
entier, il y a la fonction file() qui est très pratique, elle renvoie chaque
ligne du fichier dans une cellule d'un tableau, et tu peux concaténer le tout
avec join().

Oui j'ai vu ca, mais vu que le fichier de backup peut etre enorme, pour des
raisons de resources memoire je prefere le lire a la volee

Faudra aussi faire une fonction pour traiter un texte
(transformer
le caractère < en une séquence d'échappement, par exemple <<), et une
fonction
qui fasse l'opération inverse.

avec htmlentities ca suffit pas ?

Sinon, ce qui m'arrangerait serait de factoriser la fonction qui exporte un
jeu d'articles (avec le $result mysql en paramètre, comme dans export.php3)
afin que je puisse la réutiliser. D'autre part, pour les noms de tags, le
mieux
serait qu'ils soient égaux aux noms des champs mysql, afin de simplifier
l'import et l'export.

ca c'est prevu, je factoriserai des que ca fonctionnera correctement

Un truc du genre (pas essayé si ça marche) :

<?

function export_objets($result, $type, $string) {
    $nfields = mysql_num_fields($result);
    for ($i=0; $i<$nfields;++$i) $fields[$i]=mysql_field_name($result, $i);
    while($row = mysql_fetch_array($result)) {
        $string .= build_begin_tag($type) . "\n";
        for ($i=0; $i<$nfields;++$i) {
            $field=$fields[$i];
            $value=$row[$i];
            $string .= build_begin_tag($field) . $value .
build_end_tag($field) . "\n";
        }
        $string .= build_end_tag($type) . "\n";
    }
}

// Par exemple...
$string="<?xml version=\"1.0\"?>\n";
$result = mysql_query("SELECT * FROM spip_articles");
export_objets($result, "article", $string);
$result = mysql_query("SELECT * FROM spip_breves");
export_objets($result, "breve", $string);
fputs($file, $string);

?>

Non ?

oui c'est plus simple, mais il y a l'import de l'autre cote a traiter ...

avec htmlentities ca suffit pas ?

Ca depend si on peut faire l'opération inverse à l'import, histoire
que les textes restent "propres" (il faut qu'ils puissent être réédités
facilement). Je ne m'y connais pas assez en PHP pour répondre plus
précisément...

oui c'est plus simple, mais il y a l'import de l'autre cote a traiter ...

Mmmhhh oui... heu, je suis pas sûr que ce soit plus difficile. Enfin
je te laisse faire comme tu veux :))

a+

Antoine.