* * * This software is protected by copyright, please * read the file COPYRIGHT. * This program is distributed in the hope that it * will be useful, but without any warranty; without * even the implied warranty of merchantability or * fitness for a particular purpose. Please * read the file LICENCE. * * Ce fichier contient la gestion de BackupDb (Factory+Modéle) * * @author Rooty * @since 2005/03/11 * @link www.rooty.me * @version 0.3 * @package package * @subpackage BackupDb * @copyright Copyright © 2009-2018, Rooty */ if ( !defined('SYSTEM_IN') ) { die("Hacking attempt"); } /** * Inclusion des éléments de parsage sql (sqlParse) */ include_once($GLOBALS["CONF_LIB_PATH"]."lib/system/system_data_source/database/sql_parse.php"); /** * Classe Mysql3BackupDb *classe de gestion des BackupDb (BD) pour mysql3 * @package package * @subpackage BackupDb */ class Mysql3BackUpDb extends CommonBackupDb { // // Constructeur (non surchargé!!) // /** * Liste les tables pour une BD * @param chaine nom de la BD */ function getListTables ($db) { $i = 0; $nbtab = mysql_list_tables ($db); while ($i < mysql_num_rows ($nbtab)) { $tb_names[$i] = mysql_tablename ($nbtab, $i); $i++; } return $tb_names; } /** * Récupération des données pour une table * @param chaine nom de la table * @param entier pointeur de fichier */ function getTableData ($table, $fd) { $tableau = array (); $j = 0; $resultat = mysql_query ("select * from $table"); if ($resultat == FALSE) { return "La requete dans la table '".$table."' a echoue.
"; } else { while ($valeurs = mysql_fetch_row ($resultat)) { $this->writeLine ($valeurs, $table, $fd); } return $valeurs; } } /** * recuperation de la structure de la table * @param chaine nom de la table * @param entier pointeur de fichier */ function getTableStructure ($struct, $fd) { $requete = mysql_query ("show create table $struct"); if ($requete == FALSE) { return "la recuperation de la structure '".$struct."' a echoue.
"; } else { $structure = mysql_fetch_row ($requete); $ligne = 0; return $structure[1]; } } /** * recuperation de la structure de la table * @param chaine chaine sql de création de table * @param chaine nom de la table * @param entier pointeur de fichier */ function putStructIntoFile ($structure, $nom_table, $fd) { $struct = "#\n# Structure de la table ".$nom_table."\n#\n\n"; # Ajout de l'énnonçé DROP TABLE... $struct .="DROP TABLE IF EXISTS `".$nom_table."`;\n"; $struct .= $structure; $struct .= ";\n\n"; $ecriture = fwrite ($fd, $struct, strlen ($struct)); if ($ecriture == 0) { return "erreur lors de l'ecriture de la strucuture dans le fichier de sauvgarde."; } else{ return $fd; } } /** * integre les donnees dans un fichier * @param chaine données à insérer * @param chaine nom de la table * @param entier pointeur de fichier */ function putDataIntoFile ($donnees, $nom_table, $fd) { $lignes = 0; $infos = "#\n# donnees de la table ".$nom_table ."\n#\n\n"; fwrite ($fd, $infos, strlen ($infos)); while (isset ($donnees[$lignes])) { $appel_fonction = $this->writeLine($donnees[$lignes], $nom_table, $fd); $lignes++; } return $fd; } /** * écrit une ligne de données * @param chaine données à insérer * @param chaine nom de la table * @param entier pointeur de fichier */ function writeLine ($donnees, $nom_table, $fd) { $case = 1; $debut = "INSERT INTO `".$nom_table."` VALUES ('".$donnees[0]."'"; fwrite ($fd, $debut, strlen ($debut)); while (isset ($donnees[$case])){ fwrite ($fd, ", '".addslashes($donnees[$case])."'", strlen (", '".addslashes($donnees[$case])."'")); $case++; } $fin = ");\n\n\n"; fwrite ($fd, $fin, strlen ($fin)); } /** * Création d'une sauvegarde * @todo ne gére pas les enregistrement dont un champs peut être null :-( * @return booleen */ function backup() { # Récupération des paramètres $host=$this->host; $login=$this->login; $password=$this->passwd; $chemin=$this->path; $nom_fichier=$this->file; $db=$this->db; $emplacement = $chemin."/".$nom_fichier; if (!isset ($chemin) || !is_dir ($chemin)){ addError(2,"Mysql3BackupDb", " $chemin n'est pas un repertoire ou n'existe pas.", __line__, __file__); return false; } if (file_exists ($nom_fichier)){ addError(2,"Mysql3BackupDb","Impossible de faire la sauvegarde, le fichier $nom_fichier existe deja.", __line__, __file__); return false; }else{ $connec = mysql_connect($host, $login, $password); mysql_select_db($db, $connec); $list = $this->getListTables ($db); $tab = 0; $fd = fopen ($emplacement, "w+"); while (isset ($list[$tab])) { $structure = $this->getTableStructure ($list[$tab], $fd); $backup = $this->putStructIntoFile ($structure, $list[$tab], $fd); $query = $this->getTableData ($list[$tab], $fd); $backup_suite = $this->putDataIntoFile ($query, $list[$tab], $fd); $tab++; } fclose ($fd); chmod($emplacement, $this->perm); mysql_close ($connec); $directory = $chemin."/"; $name_zip = substr ( $nom_fichier, 0,strpos($nom_fichier, ".")); $name = $nom_fichier; return true; } } /** * Réstauration d'une sauvegarde * @return booleen */ function restore() { # Récupération des paramètres $host=$this->host; $login=$this->login; $password=$this->passwd; $chemin=$this->path; $nom_fichier=$this->file; $db=$this->db; $emplacement = $chemin."/".$nom_fichier; if (!isset ($chemin) || !is_dir ($chemin)){ addError(2,"Mysql3BackupDb", " $chemin n'est pas un repertoire ou n'existe pas.", __line__, __file__); return false; } if (!file_exists ($emplacement)){ addError(2,"Mysql3BackupDb","Impossible d'executer le fichier $nom_fichier n'existe pas.", __line__, __file__); return false; }else{ $connect = mysql_connect($host, $login, $password); mysql_select_db($db, $connect); $sql_query = @fread(@fopen($emplacement, 'r'), @filesize($emplacement)); $sql_query = remove_remarks($sql_query); $sql_query = split_sql_file($sql_query, ";"); $sql_query = make_path($sql_query); for ($i = 0; $i < sizeof($sql_query); $i++) { if (trim($sql_query[$i]) != '') { if (!($result = mysql_query($sql_query[$i],$connect))) { addError(2,"Mysql3BackupDb","Impossible d'executer le fichier $nom_fichier n'existe pas.", __line__, __file__); return false; } } } return true; } } } ?>