/** * Creation d'un fichier temporaire de sauvegarde contenant les instructions SQL * * @param out_file Fichier cible pour stockage des instructions SQL */ function Sql_buildSqlFile($out_file, $sql = '', $table = '') { $crlf = Lib_endOfLine(); $out_handle = fopen($out_file, "w"); fputs($out_handle, "# Serveur: " . $GLOBALS['serveur_mysql1'] . " BdD: " . $GLOBALS['db1'] . "{$crlf}"); fputs($out_handle, $crlf); fputs($out_handle, "# --------------------------------------------------------{$crlf}"); fputs($out_handle, "# DumpingData '" . $GLOBALS['prefix'] . "{$table}'{$crlf}"); fputs($out_handle, "# --------------------------------------------------------{$crlf}"); fputs($out_handle, $crlf); fputs($out_handle, "DELETE from " . $GLOBALS['prefix'] . "{$table};{$crlf}"); fputs($out_handle, $crlf); if ($sql != "") { $sql = preg_replace('`;`', ' ', $sql); } else { $sql = "SELECT * FROM " . $GLOBALS['db1'] . "." . $GLOBALS['prefix'] . $table; } $result = Sql_query($sql); $sql = ""; if (!$result) { echo $MSG[$lang]['ProblemeSql']; echo $MSG['fr']['MessageBase'] . mysql_errno() . " : " . mysql_error() . "<BR>"; return; } $nb_lines = mysql_num_rows($result); //============================================================================ // Si la table n'a pas de lignes, on continue avec la table suivante //============================================================================ if ($nb_lines == 0) { return; } //============================================================================ // On construit la liste des champs pour eviter d'avoir des problemes d'INSERT //============================================================================ $fields = "("; $list_fields = mysql_list_fields($GLOBALS['db1'], $GLOBALS['prefix'] . $table); $columns = mysql_num_fields($list_fields); for ($i = 0; $i < $columns; $i++) { $fields .= strcmp($fields, "(") == 0 ? mysql_field_name($list_fields, $i) : "," . mysql_field_name($list_fields, $i); } $fields .= ")"; $insert_table = "INSERT INTO " . $GLOBALS['prefix'] . "{$table} {$fields} VALUES"; $insert_table = trim($insert_table); $i = 0; while ($i < $nb_lines) { fputs($out_handle, "{$insert_table} {$crlf}"); $k = 0; //============================================================= // $lines_max represente le nombre de lignes maximum par INSERT // defini dans le conf.php //============================================================= while ($k < $GLOBALS['lines_max']) { $row = mysql_fetch_row($result); $schema_insert = "("; @set_time_limit(60); $table_list = "("; for ($j = 0; $j < mysql_num_fields($result); $j++) { $table_list .= mysql_field_name($result, $j) . ", "; } $table_list = substr($table_list, 0, -2); $table_list .= ")"; for ($j = 0; $j < mysql_num_fields($result); $j++) { if (!isset($row[$j])) { $schema_insert .= " NULL,"; } elseif ($row[$j] != "") { $dummy = ""; // JPLt: Avant d'effectuer la boucle sur chaque ligne, on vérifie si les caractères à remplacer existent if (preg_match("/[\\\\'\"\\x00\\x0a\\x0d\\x08\t\\x1a]/", $row[$j])) { $srcstr = $row[$j]; for ($xx = 0; $xx < strlen($srcstr); $xx++) { $yy = strlen($dummy); if ($srcstr[$xx] == "\\") { $dummy .= "\\\\"; } if ($srcstr[$xx] == "'") { $dummy .= "\\'"; } if ($srcstr[$xx] == "\"") { $dummy .= "\\\""; } if ($srcstr[$xx] == "") { $dummy .= "\\0"; } if ($srcstr[$xx] == "\n") { $dummy .= "\\n"; } if ($srcstr[$xx] == "\r") { $dummy .= "\\r"; } if ($srcstr[$xx] == "") { $dummy .= "\\b"; } if ($srcstr[$xx] == "\t") { $dummy .= "\\t"; } if ($srcstr[$xx] == "") { $dummy .= "\\Z"; } if (strlen($dummy) == $yy) { $dummy .= $srcstr[$xx]; } } } else { $dummy = $row[$j]; } $schema_insert .= " '" . $dummy . "',"; } else { $schema_insert .= " '',"; } } $schema_insert = preg_replace("`,\$`", "", $schema_insert); $schema_insert .= ")"; $schema_insert = trim($schema_insert); //============================================================================ // On ecrit dans le fichier temporaire //============================================================================ if ($k == $GLOBALS['lines_max'] - 1 || $i == $nb_lines - 1) { fputs($out_handle, "{$schema_insert};{$crlf}"); } else { fputs($out_handle, "{$schema_insert},{$crlf}"); } $k++; $i++; if ($i == $nb_lines) { break; } } } fclose($out_handle); }
function Sauvegarde_FTP($data_in = array()) { Lib_myLog("action: " . $data_in['action']); foreach ($GLOBALS['tab_globals'] as $global) { global ${$global}; } Lib_myLog("IN: ", $data_in); Lib_myLog("FILE: ", __FILE__); // Tout d'abord on réunit tous les fichiers de la sauvegarde en un seul fichier $datadir = DIR . "data/"; $xtr_file = $datadir . $data_in['sauvegarde']; $basename = basename($xtr_file, ".xtr"); $crlf = Lib_endOfLine(); // On récupère la liste des tables sauvegardées if (is_file($xtr_file) && file_exists($xtr_file) && ($hd = fopen($xtr_file, "r"))) { $auth_tables = unserialize(fread($hd, filesize($xtr_file))); fclose($hd); } /*=============s*/ Lib_myLog("Creation du fichier sql global"); $ftp_file = $datadir . $basename . '.sql'; $ftp_hd = fopen($ftp_file, 'w+'); /*=============s*/ Lib_myLog("Ajout du fichier descriptif xtr"); $hd = fopen($xtr_file, "r"); $str = "# Fichier: {$data_in['sauvegarde']}{$crlf}"; $str .= fread($hd, filesize($xtr_file)); $str .= $crlf; fwrite($ftp_hd, $str); fclose($hd); // Pour chaque table on récupère le fichier et on rajoute au fichier total foreach ($auth_tables as $table => $etat) { /*=============*/ Lib_myLog("Ajout du fichier sql de la table {$table} "); $sql_file = $datadir . $basename . "_" . $table . ".sql"; $hd = fopen($sql_file, "r"); $str = "# Fichier: {$basename_}{$table}.sql{$crlf}"; $str .= fread($hd, filesize($sql_file)); fwrite($ftp_hd, $str); fclose($hd); } fclose($ftp_hd); // Obligés de nettoyer le buffer de sortie sinon les %%prefix%% sont remplacés! ob_end_clean(); $size = filesize($ftp_file); $filename = $basename . ".sql"; header("Content-Type: application/octet-stream"); header("Content-Length: {$size}"); header("Content-Disposition: attachment; filename={$filename}"); header("Content-Transfer-Encoding: binary"); $fh = fopen("{$ftp_file}", "r"); fpassthru($fh); }
/** * Creation d'un fichier temporaire de sauvegarde contenant les instructions SQL * * @param out_file Fichier cible pour stockage des instructions SQL */ function Sql_buildSqlFile($out_file, $sql = '') { $crlf = Lib_endOfLine(); $out_handle = fopen($out_file, "w"); fputs($out_handle, "# BdD: " . $GLOBALS['db'] . "{$crlf}"); //=========================================================================== // auth_tables[] vient du .conf et contient la liste des tables a sauvegarder //=========================================================================== foreach ($GLOBALS['AUTH_TABLES'] as $table) { fputs($out_handle, $crlf); fputs($out_handle, "# --------------------------------------------------------{$crlf}"); fputs($out_handle, "# DumpingData '" . $GLOBALS['prefix'] . "{$table}'{$crlf}"); fputs($out_handle, "# --------------------------------------------------------{$crlf}"); fputs($out_handle, $crlf); fputs($out_handle, "DELETE from " . $GLOBALS['prefix'] . "{$table};{$crlf}"); fputs($out_handle, $crlf); if ($sql != "") { $sql = ereg_replace(';', ' ', $sql); } else { $sql = "SELECT * FROM " . $GLOBALS['db'] . "." . $GLOBALS['prefix'] . $table; } $result = Sql_query($sql); $sql = ""; if (!$result) { echo $MSG[$lang]['ProblemeSql']; echo $MSG['fr']['MessageBase'] . Sql_errorCode($result) . " : " . Sql_errorInfo($result) . "<BR>"; break; } $first_line = Sql_fetch($result); //============================================================================ // Si la table n'a pas de lignes, on continue avec la table suivante //============================================================================ if (count($first_line) <= 1) { continue; } //============================================================================ // On construit la liste des champs pour eviter d'avoir des problemes d'INSERT //============================================================================ $fields = "("; foreach ($first_line as $index => $val) { $fields .= $index . ","; } $fields .= ")"; // $fields = "("; // $list_fields = mysql_list_fields($GLOBALS['db'], $GLOBALS['prefix'].$table); // $columns = mysql_num_fields($list_fields); // for ($i = 0; $i < $columns; $i++) // $fields .= (strcmp($fields,"(") == 0) ? mysql_field_name($list_fields, $i) : ",".mysql_field_name($list_fields, $i); // $fields .= ")"; $insert_table = "INSERT INTO " . $GLOBALS['prefix'] . "{$table} {$fields} VALUES"; $insert_table = trim($insert_table); while ($row = Sql_fetch($result)) { fputs($out_handle, "{$insert_table} {$crlf}"); $k = 0; //============================================================= // $lines_max represente le nombre de lignes maximum par INSERT // defini dans le conf.php //============================================================= while ($k < $GLOBALS['lines_max']) { $schema_insert = "("; @set_time_limit(60); $table_list = "("; for ($j = 0; $j < mysql_num_fields($result); $j++) { $table_list .= mysql_field_name($result, $j) . ", "; } $table_list = substr($table_list, 0, -2); $table_list .= ")"; for ($j = 0; $j < mysql_num_fields($result); $j++) { if (!isset($row[$j])) { $schema_insert .= " NULL,"; } elseif ($row[$j] != "") { $dummy = ""; $srcstr = $row[$j]; for ($xx = 0; $xx < strlen($srcstr); $xx++) { $yy = strlen($dummy); if ($srcstr[$xx] == "\\") { $dummy .= "\\\\"; } if ($srcstr[$xx] == "'") { $dummy .= "\\'"; } if ($srcstr[$xx] == "\"") { $dummy .= "\\\""; } if ($srcstr[$xx] == "") { $dummy .= "\\0"; } if ($srcstr[$xx] == "\n") { $dummy .= "\\n"; } if ($srcstr[$xx] == "\r") { $dummy .= "\\r"; } if ($srcstr[$xx] == "") { $dummy .= "\\b"; } if ($srcstr[$xx] == "\t") { $dummy .= "\\t"; } if ($srcstr[$xx] == "") { $dummy .= "\\Z"; } if (strlen($dummy) == $yy) { $dummy .= $srcstr[$xx]; } } $schema_insert .= " '" . $dummy . "',"; } else { $schema_insert .= " '',"; } } $schema_insert = ereg_replace(",\$", "", $schema_insert); $schema_insert .= ")"; $schema_insert = trim($schema_insert); //============================================================================ // On ecrit dans le fichier temporaire //============================================================================ if ($k == $GLOBALS['lines_max'] - 1 || $i == $nb_lines - 1) { fputs($out_handle, "{$schema_insert};{$crlf}"); } else { fputs($out_handle, "{$schema_insert},{$crlf}"); } $k++; $i++; if ($i == $nb_lines) { break; } } } } fclose($out_handle); }
/** * Fonction pour telecharger des donnees texte afin de pouvoir les enregistrer * sur le client leger. * @param $data Donnees a telecharger */ function Lib_myExtract($data, $filename = '') { if ($filename == '') { $filename = "data.csv"; } header("Content-disposition: filename={$filename}"); header("Content-type: application/octetstream"); header("Pragma: no-cache"); header("Expires: 0"); $crlf = Lib_endOfLine(); foreach ($data as $line) { print $line; if (!preg_match("/" . $crlf . "/", $line)) { print $crlf; } } }