Ejemplo n.º 1
0
/**
 * Lire l'entete du fichier importe
 * Balise ouvrante:
 * 'SPIP' si fait par spip, nom de la base source si fait par  phpmyadmin
 *
 * @param resource $f
 * @param string $gz
 * @return array
 */
function import_debut($f, $gz='fread') {

//  Pour les anciennes archives, indiquer le charset par defaut:
	$charset = 'iso-8859-1'; 
//  les + recentes l'ont en debut de ce fichier 
	$flag_phpmyadmin = false;
	$b = false;
	while ($t = xml_fetch_tag($f, $b, $gz, '')) {
		$r = xml_parse_tag($t);
		if ($r[0] == '?xml' AND $r[1]['encoding'])
			$charset = strtolower($r[1]['encoding']);
		elseif ($r[0] == "SPIP") {$r[2] = $charset; return $r;}
		if (($r[0] == "!--") && (preg_match(",phpmyadmin\sxml\sdump,is",$r[1]))){
			// c'est un dump xml phpmyadmin
			// on interprete le commentaire pour recuperer la version de phpmydadmin
			$version = preg_replace(",(.*?)version\s*([0-9a-z\.\-]*)\s(.*),is","\\2",$r[1]);
			$flag_phpmyadmin = true;
		}
		if (($r[0] != "!--") && ($flag_phpmyadmin == true)){
			$r[1] = array('version_archive'=>"phpmyadmin::$version");
			$r[2] = $charset;
			return $r;
		}
	}
}
Ejemplo n.º 2
0
function inc_import_1_3_dist($lecteur, $request, $gz='fread', $atts=array()) {
  global $import_ok, $tables_trans,  $trans;
	static $tables = '';
	static $phpmyadmin, $fin;
	static $field_desc = array ();
	static $defaut = array('field' => array());

	// au premier appel, init des invariants de boucle 

	if (!$tables OR $trans) {
		$init = $request['init'];
		$tables = $init($request);
		if (!$tables) return  ($import_ok = false);
		$phpmyadmin = preg_match("{^phpmyadmin::}is",
			$GLOBALS['meta']['restauration_version_archive'])
			? array(array('"','>'),array('"','>'))
			: false;
		$fin = '/' . $GLOBALS['meta']['restauration_tag_archive'];
	}

	$b = false;
	if (!($table = xml_fetch_tag($lecteur, $b, $gz))) return false;
	if ($table == $fin) return !($import_ok = true);
	if (strpos($table,'=')!==FALSE) {
		list($table, $attl) = xml_parse_tag($table);
		$atts = array_merge($atts, $attl);
	}

	$new = isset($tables_trans[$table]) ? $tables_trans[$table]: $table; 

	// indique a la fois la fonction a appliquer
	// et les infos qu'il faut lui communiquer
	$boucle = $request['boucle'];

	if (!in_array($new,$tables))
		$field_desc[$boucle][$table] = $desc = $defaut;
	elseif (isset($field_desc[$boucle][$table]))
		$desc = $field_desc[$boucle][$table];
	else {
		// recuperer la description de la table pour connaitre ses champs valides
		$desc = description_table($table);
		if (!isset($desc['field']))
			$desc = $defaut;
		elseif (isset($request['insertion']) 
		AND $request['insertion']=='on')
			$desc['field'] = import_collecte($desc); 
		$field_desc[$boucle][$table] = $desc;
		#spip_log("$table :".var_export($field_desc[$boucle][$table],1),'dbrest');
	}

	$values = import_lire_champs($lecteur,
				     $desc['field'],
				     $gz,
				     $phpmyadmin,
				     '/' . $table,
				     $atts);

	if ($values === false) return  ($import_ok = false);

	if ($values) $boucle($values, $new, $desc, $request, $atts);

	return $import_ok = $new;
}