Make Regenerate Script

Le script PHP permet, à partir d'une base MySQL, de produire un script MySQL permettant de répliquer/sauvegarder la structure de la base et, en option, ses données.

Je n'ai pas une grande expérience des autres systèmes de gestion de bases de données, mais je me dis que ce script PHP peut être pratique pour exporter une base MySQL vers un autre SGBD, ou vers un autre serveur, ou comme une forme de sauvegarde, ou...

Le script MySQL produit est de la forme:

DROP nomDB;
CREATE DATABASE nomDB;
USE nomDB;
CREATE TABLE nomTable (
   ...
);
INSERT INTO nomTable VALUES
   (...),
   ...;

Mais sans plus attendre le script PHP:

<?php
/*******************************************************************************
*script: makeRegenerateScript                                                  *
*version: 1.0                                                                  *
*action: produit un fichier comportant un script pour recréer une base MySQL.  *
*paramètres: dbName = nom de la base                                           *
*            options & 1 => affiche le fichier créer                           *
*            options & 2 => sauvegarde le script dans fichier                  *
*            options & 4 => inclu les enregistrements en plus de la structure de*
*                          la base dans le fichier créer                       *
*                                                                              *
*auteur: thierry schmit                                                        *
*        www.crazilec.com                                                      *
*licence: GNU GPL                                                              *
********************************************************************************/

define(MRS_OPTION_AFF, 1);
define(MRS_OPTION_SAV, 2);
define(MRS_OPTION_ENR, 4);

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");             // Date du passé
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // toujours modifié
header("Cache-Control: no-cache, must-revalidate");           // HTTP/1.1
header("Pragma: no-cache");                                   // HTTP/1.0

/***********************************************
ici j'ouvre la base de données et j'affecte le résultat
du mysql_connect à $db.
vous devez remplacer cette ligne par qqch du genre
$db = mysql_connect("host", "login", "pass");
mysql_select_db($dbName, $db);
vous pouvez aussi passez $db en paramètre du script
*/
include("../common/opendb.php");
/************************************************/

$str = "DROP DATABASE ".$dbName.";\n\nCREATE DATABASE ".$dbName.";\n\nUSE ".$dbName.";\n\n";

$resTable = mysql_query("SHOW TABLES", $db);
while ( $table = mysql_fetch_row($resTable) ) {
   $str .= "CREATE TABLE ".$table[0]." (\n";
   $priKey = "";
   $resDesc = mysql_query("DESCRIBE ".$table[0], $db);
   if ( $resDesc ) {
      $iMax = mysql_num_rows($resDesc);
      while ( $desc = mysql_fetch_row($resDesc) ) {
         $descStr = "   ".$desc[0]." ".$desc[1];
         if ( $desc[2] != "YES" ) {
            $descStr .= " NOT NULL";
         }
         if ( $desc[3] == "PRI" ) {
            $priKey .= $desc[0].", ";
         }
         if ( $desc[4] != "" ) {
            $descStr .= " DEFAULT \"".$desc[4]."\"";
         }
         if ( $desc[5] != "" ) {
            $descStr .= " ".$desc[5];
         }
         $str .= $descStr.",\n";
      }
      $priKey = substr($priKey, 0, strlen($priKey) - 2);
      $str .= "   PRIMARY KEY (".$priKey."));\n\n";
   }
   if ( $options & MRS_OPTION_ENR ) {
      $resVal = mysql_query("SELECT * FROM ".$table[0], $db);
      $str .= "INSERT INTO ".$table[0]." VALUES\n";
      while ( $val = mysql_fetch_row($resVal) ) {
         $valStr = "   (";
         for ($i=0; $i < $iMax - 1; $i++) {
            $valStr .= "\"".$val[$i]."\", ";
         }
         $str .= $valStr."\"".$val[$i]."\"),\n";
      }
      $i = strlen($str) - 3;
      $str{$i++} = ')';
      $str{$i++} = ';';
      $str{$i++} = "\n";
      $str{$i} = "\n";
   }
}

mysql_close($db);

if ( $options & MRS_OPTION_SAV ) {
   $dest = fopen("reg".$dbName.".txt", "w");
   fwrite($dest, $str);
   fclose($dest);
}

if ( $options & MRS_OPTION_AFF ) {
   echo "voici le script permettant de re-générer la base ".$dbName." sous MySQL:<br>";
   echo "<pre style=\"background-color:#dddddd\">";
   echo $str;
   echo "</pre>";
}
?>