Skip to content
Extraits de code Groupes Projets
Valider 58eb36fa rédigé par esj's avatar esj
Parcourir les fichiers

Optimisation de la lecture d'une sauvegarde: prévenir systématiquement si la...

Optimisation de la lecture d'une sauvegarde: prévenir systématiquement si la zone entre deux balises est à recopier; éviter la copie intermédiaire du buffet entre la recherche de < et celle de > grace au 3e argument de strpos.
parent 1da0b4bf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -41,6 +41,7 @@ $GLOBALS['flag_ob_flush'] = function_exists('ob_flush');
// Les balises commencant par <! sont ignorees
// $abs_pos est globale pour pouvoir etre reinitialisee a la meta
// status_restauration en cas d'interruption sur TimeOut.
// Evite au maximum les recopies
// http://doc.spip.org/@xml_fetch_tag
function xml_fetch_tag($f, &$before, $_fread='fread', $skip='!') {
......@@ -51,27 +52,29 @@ function xml_fetch_tag($f, &$before, $_fread='fread', $skip='!') {
while (($b=strpos($buf,'<'))===false) {
if (!($x = $_fread($f, 1024))) return '';
$buf .= $x;
if ($before)
$buf .= $x;
else $buf = $x;
}
if ($before) $before = str_replace($ent,$brut,substr($buf,0,$b));
# else { spip_log("position: $abs_pos" . substr($buf,0,12));flush();}
// pour ignorer un > de raccourci Spip avant un < de balise XML
$buf = substr($buf,++$b);
// $b pour ignorer un > de raccourci Spip avant un < de balise XML
while (($e=strpos($buf,'>'))===false) {
while (($e=strpos($buf,'>', $b))===false) {
if (!($x = $_fread($f, 1024))) return '';
$buf .= $x;
}
if ($buf[0]!=$skip) {
$tag = substr($buf, 0, $e);
if ($buf[++$b]!=$skip) {
$tag = substr($buf, $b, $e-$b);
$buf = substr($buf,++$e);
$abs_pos += $e + $b;
$abs_pos += $e;
return $tag;
}
$buf = substr($buf,++$e);
$abs_pos += $e + $b;
$abs_pos += $e;
return xml_fetch_tag($f,$before,$_fread,$skip);
}
......
......@@ -127,21 +127,20 @@ function import_lire_champs($f, $fields, $gz, $phpmyadmin, $table)
$char = $GLOBALS['meta']['charset_insertion'];
if ($char == $GLOBALS['meta']['charset_restauration']) $char = '';
$b = false;
for (;;) {
$b = false;
if (!($col = xml_fetch_tag($f, $b, $gz))) return false;
if ($col[0] == '/') {
if ($col != $table) {
// autre tag fermant ici est une erreur de format
spip_log("restauration de la table $table, tag fermant inattendu:");
spip_log($col);
spip_log("restauration de la table $table, tag fermant inattendu:");
spip_log($col);
}
break;
}
$value = true;
$value = $b = (($col != 'maj') AND (isset($fields[$col])));
if (!xml_fetch_tag($f, $value, $gz)) return false;
if ( ($col != 'maj') AND (isset($fields[$col])) ) {
if ($b) {
if ($phpmyadmin)
$value = str_replace($phpmyadmin[0],$phpmyadmin[1],$value);
if ($char)
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter