IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Copie de base de données


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Copie de base de données
    Bonjour à Tous,
    j'ai trouvé un programme en PHP que je voudrais utiliser pour sauvegarder mes bases de données sur un serveur Windows 2003.
    le problème c'est que la sauvegarde est bien faite mais les fichiers sont tous vides.
    Pouvez vous me dire où se situe le problème ou au besoin me conseiller un autre programme ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <?php
    //////////////////////////////////////////////////////////////////////
    //                                                                    //            
    //                         MySQL Backup Tool                            //
    //                                                                    //
    //////////////////////////////////////////////////////////////////////
     
    // Path Data
     
    $ap_path = dirname(__FILE__);
     
    $path_tmp = explode("\\",$ap_path);
     
    if(end($path_tmp)=="Bin")
    {
        $binpop = array_pop($path_tmp);
     
        $real_path = implode($path_tmp,"\\")."\\";
     
    }else{ exit; }
     
     
    // Parsing config.ini
     
    $ini_array = parse_ini_file($real_path."\Config\config.ini");
    //print_r($ini_array);
     
     
    // DB Conf 
     
    $mysql_db_host    =    $ini_array['dbhost'];
    $mysql_db_user    =    $ini_array['dbuser'];
    $mysql_db_pasw    =    $ini_array['dbpass'];
     
    // Backup Dir
     
    $backupdir        =    $ini_array['bckdir'];
     
     
    // Backup Date Dir
     
    if(substr($backupdir,-1)=="\\"){ $backupdir = substr($backupdir,0,strlen($backupdir)-1);}
     
    if(!file_exists($backupdir)){ mkdir($backupdir); }
    if(!file_exists($backupdir."\\".date("Y"))){ mkdir($backupdir."\\".date("Y")); }
    if(!file_exists($backupdir."\\".date("Y")."\\".date("m"))){ mkdir($backupdir."\\".date("Y")."\\".date("m")); }
    if(!file_exists($backupdir."\\".date("Y")."\\".date("m")."\\".date("d"))){ mkdir($backupdir."\\".date("Y")."\\".date("m")."\\".date("d")); }
     
    $backupdir    =    $backupdir."\\".date("Y")."\\".date("m")."\\".date("d")."\\".date("H-i-s");
     
    mkdir($backupdir);
     
    //////////////////////////////////////////////////////////////////////
    //                                                                    //            
    //                         MySQL Open Connection                        //
    //                                                                    //
    //////////////////////////////////////////////////////////////////////
     
    $connect = mysql_connect($mysql_db_host, $mysql_db_user, $mysql_db_pasw);
     
    if(!$connect){ die('Could not connect: ' . mysql_error()); }
     
     
    //////////////////////////////////////////////////////////////////////
    //                                                                    //            
    //                         MySQL Backup Query                            //
    //                                                                    //
    //////////////////////////////////////////////////////////////////////
     
    $myquery = array();
    $resultd = array();
     
    //////////////////////////////////////////////////////////////////////
    // Show Databases
    //////////////////////////////////////////////////////////////////////
     
    $myquery['showdb']    = "SHOW DATABASES";
    $resultd['showdb'] = mysql_query($myquery['showdb'], $connect);
     
    while($row = mysql_fetch_assoc($resultd['showdb']))
    {
        $db_name = $row['Database'];
     
        echo $db_name."\r\n";
     
        $exec_str = "{$real_path}Bin\mysqldump -h {$mysql_db_host} -u {$mysql_db_user} -p{$mysql_db_pasw} {$db_name} > {$backupdir}\\{$db_name}.sql";
        exec($exec_str);
    }
     
     
    //////////////////////////////////////////////////////////////////////
    //                                                                    //            
    //                         MySQL Close Connection                        //
    //                                                                    //
    //////////////////////////////////////////////////////////////////////
     
    mysql_close($connect);
     
    ?>
    Cdlt;

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <?php
     
    ///////////////////////
    // MySQL Backup Tool //
    ///////////////////////
     
    // Path Data
    $ap_path = dirname(__FILE__);
    $path_tmp = explode("\\",$ap_path);
     
    if (end($path_tmp)=="Bin") {$binpop = array_pop($path_tmp);
       $real_path = implode($path_tmp,"\\")."\\";
    } else {
       exit;
    }
     
    // Parsing config.ini
    $ini_array = parse_ini_file($real_path."\Config\config.ini");
    //print_r($ini_array);
     
    // DB Conf
    $mysql_db_host = $ini_array['dbhost'];
    $mysql_db_user = $ini_array['dbuser'];
    $mysql_db_pasw = $ini_array['dbpass'];
     
    // Backup Dir
    $backupdir = $ini_array['bckdir'];
     
    // Backup Date Dir
    if (substr($backupdir,-1)=="\\") { $backupdir = substr($backupdir,0,strlen($backupdir)-1); }
     
    if (!file_exists($backupdir)) { mkdir($backupdir); }
    if (!file_exists($backupdir."\\".date("Y"))) { mkdir($backupdir."\\".date("Y")); }
    if (!file_exists($backupdir."\\".date("Y")."\\".date("m"))) { mkdir($backupdir."\\".date("Y")."\\".date("m")); }
    if (!file_exists($backupdir."\\".date("Y")."\\".date("m")."\\".date("d"))) { mkdir($backupdir."\\".date("Y")."\\".date("m")."\\".date("d")); }
     
    $backupdir = $backupdir."\\".date("Y")."\\".date("m")."\\".date("d")."\\".date("H-i-s");
    mkdir($backupdir);
     
    ///////////////////////////
    // MySQL Open Connection //
    ///////////////////////////
     
    $connect = mysql_connect($mysql_db_host, $mysql_db_user, $mysql_db_pasw);
     
    if (!$connect) {
       die('Could not connect: ' . mysql_error());
    }
     
    ////////////////////////
    // MySQL Backup Query //
    ////////////////////////
     
    $myquery = array();
    $resultd = array();
     
    ////////////////////
    // Show Databases //
    ////////////////////
     
    $myquery['showdb'] = "SHOW DATABASES";
    $resultd['showdb'] = mysql_query($myquery['showdb'], $connect);
     
    while($row = mysql_fetch_assoc($resultd['showdb'])) {
       $db_name = $row['Database'];
       echo $db_name."\r\n";
       $exec_str = "{$real_path}Bin\mysqldump -h {$mysql_db_host} -u {$mysql_db_user} -p{$mysql_db_pasw} {$db_name} > {$backupdir}\\{$db_name}.sql";
       exec($exec_str);
    }
     
    ////////////////////////////
    // MySQL Close Connection //
    ////////////////////////////
     
    mysql_close($connect);
     
    ?>
    c'est très très moche comme code et je trouve pas que PHP soit très approprié pour faire des scripts d'admin mais bon
    au minimum on peut dire que :
    • exec() c'est crado (attention system() c'est pas mieux)
    • ne pas checker si la commande mysqldump s'est bien exécutée c'est mal
    • y'a de bonnes chances pour que Bin\mysqldump ne marche pas et qu'il faille rajouter un échappement Bin\\mysqldump (auquel cas la commande ou le shell devrait renvoyer un message d'erreur)
    • la fonction mkdir() dispose d'une option $recursive = false (par défaut) qui permettrait de se débarrasser de la forêt de if des lignes 32 à 35


    pour le reste il manque sans doute un contexte (...) et je ne suis par ailleurs pas développeur PHP

    Kwaigonjin Bob.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai trouvé ici une fonction full PHP qui semble donner de bons résultats :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php backup_tables('localhost','username','password','*');

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    /* backup the db OR just a table */
    function backup_tables($host,$user,$pass,$name,$tables = '*')
    {
     
    	$link = mysql_connect($host,$user,$pass);
    	mysql_select_db($name,$link);
     
    	//get all of the tables
    	if($tables == '*')
    	{
    		$tables = array();
    		$result = mysql_query('SHOW TABLES');
    		while($row = mysql_fetch_row($result))
    		{
    			$tables[] = $row[0];
    		}
    	}
    	else
    	{
    		$tables = is_array($tables) ? $tables : explode(',',$tables);
    	}
     
    	//cycle through
    	foreach($tables as $table)
    	{
    		$result = mysql_query('SELECT * FROM '.$table);
    		$num_fields = mysql_num_fields($result);
     
    		$return.= 'DROP TABLE '.$table.';';
    		$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
    		$return.= "\n\n".$row2[1].";\n\n";
     
    		for ($i = 0; $i < $num_fields; $i++) 
    		{
    			while($row = mysql_fetch_row($result))
    			{
    				$return.= 'INSERT INTO '.$table.' VALUES(';
    				for($j=0; $j<$num_fields; $j++) 
    				{
    					$row[$j] = addslashes($row[$j]);
    				//	$row[$j] = ereg_replace("\n","\\n",$row[$j]); // ereg_replace est obsolète !
    					$row[$j] = preg_replace( '#\n#', '\\n', $row[$j] );
    					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
    					if ($j<($num_fields-1)) { $return.= ','; }
    				}
    				$return.= ");\n";
    			}
    		}
    		$return.="\n\n\n";
    	}
     
    	//save file
    	$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
    	fwrite($handle,$return);
    	fclose($handle);
    }
    Je l'ai aussi adaptée (pour mes besoins) en PDO :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php sql_backup_tables('*');
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
    // ---------------------------------------------------
    // FONCTION : backup the db OR just a table
    function sql_backup_tables($tables = '*')
    {
    	// -----------------
    	// connexion PDO
    	global $pdo;		// (ici, la connexion est faite à l'extérieur de la fonction)
    	// -----------------
    	//get all of the tables
    	if($tables == '*')
    	{
    		$tables 		= array();
    		$show_query		= "SHOW TABLES;";
    		$show_result	= $pdo->query($show_query);
    		while( $row = $show_result->fetch() )
    		{
    			$tables[] 	= $row[0];
    		}
    	} else {
    		$tables 		= is_array($tables) ? $tables : explode(',',$tables);
    	}
     
    	// -----------------
    	//cycle through
    	$return				= "";
    	foreach($tables as $table)
    	{
    		$return			.= "-- --------------------------------------------------------\n\n";
    		$return			.= "DROP TABLE IF EXISTS `".$table."`;";
     
    		$show2_query	= "SHOW CREATE TABLE `".$table."`;";
    		$show2_result	= $pdo->query($show2_query);
    		$row2 			= $show2_result->fetch();
    		$return			.= "\n-- \n-- Structure de la table `".$table."`\n-- \n\n";
    		$return			.= $row2[1].";\n";
     
    		$return			.= "\n-- \n-- Contenu de la table `".$table."`\n-- \n\n";
    		$select_query	= "SELECT * FROM `".$table."`;";
    		$select_result	= $pdo->query($select_query);
    		$num_fields 	= $select_result->columnCount();	
    		for ($i = 0; $i < $num_fields; $i++) 
    		{
    			while( $row = $select_result->fetch() )
    			{
    				$return	.= "INSERT INTO `".$table."` VALUES( ";
    				for($j=0; $j<$num_fields; $j++) 
    				{
    					$row[$j] = addslashes($row[$j]);
    					$row[$j] = preg_replace( '#\n#', '\\n', $row[$j] );
    					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
    					if ($j<($num_fields-1)) { $return.= ','; }
    				}
    				$return.= " );\n";
    			}
    		}
     
    		$return			.= "\n\n";
    	}
    	$return				= str_replace( 'CREATE TABLE ', 'CREATE TABLE IF NOT EXISTS ', $return);
    	$return				.= "-- --------------------------------------------------------\n\n";
    	// -----------------
    	// save file
    	$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
    	fwrite($handle,$return);
    	fclose($handle);
    }
    // ---------------------------------------------------
    ?>

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Et pourquoi pas utiliser les outils adéquats ?

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysqldump -u root -p maBase > maBase_backup.sql

  5. #5
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Bonjour à tous,

    @ jreaux62, je ne comprend pas bien ta connexion PDO...

    Dans la partie connexion PDO de ton code, j'ai mis cela... je n'ai rien en résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //global $pdo;
    	$host = "localhost";			# Login utilisateur simple
    	$database_name = "info";
    	$user = 'root';
    	$pass = "";
    	try{
    		$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $pass);
    		echo "yes";
    		}
    	catch(exception $e){
    		die('erreur : '.$e->getMessage());
    	}

    Merci pour ton partage
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    // connexion PDO
    require('connexion/connexion_pdo.php');
     
     
    // ---------------------------------------------------
    // FONCTION : backup the db OR just a table
    function sql_backup_tables($tables = '*')
    {
    	// -----------------
    	// connexion PDO
    	global $pdo;		// (ici, la connexion est faite à l'extérieur de la fonction)
    	// -----------------
    	// .......
    Dans le fichier connexion/connexion_pdo.php, tu mets le code de connexion.
    -> cela évite d'avoir à le recopier à chaque fois !

    + ajoute des paramètres supplémentaires :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     //.........
    	$extraParams = array(
    				PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,	// rapport d'erreurs sous forme d'exceptions
    				PDO::ATTR_PERSISTENT => true, 					// Connexions persistantes
    				PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"	// encodage UTF-8
    				);
    	// Instancie la connexion
    	$pdo = new PDO("mysql:host=$host;dbname=$database_name", $user, $pass, $extraParams);

    N.B. global $pdo; dans la fonction permet d'utiliser la connexion en tant que variable globale.

  7. #7
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Merci ! top...
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

Discussions similaires

  1. Copie base de donnée oracle
    Par awax dans le forum Import/Export
    Réponses: 6
    Dernier message: 15/01/2009, 16h44
  2. Copie Base de données
    Par dumser1 dans le forum Oracle
    Réponses: 7
    Dernier message: 31/08/2007, 16h15
  3. listes liées Base de données+PHP+javascript
    Par bbk91 dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 03/08/2007, 09h16
  4. [URGENT]Problème copie base de données
    Par elsuket dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 21/05/2007, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo