17 05 2014
J’ai récemment été confronté à un dilemme : Pouvoir recréer en local ma structure de base de données rapidement afin de lancer des tests unitaires.
Le souci est que certaines tables sont des données « systèmes » alors que d’autres non dont je n’ai nullement besoin.
Par exemple, je n’ai pas besoin des données de ma table « commande », « client » et à l’inverse, j’ai besoin de ma table « produit » etc.
Voici un script qui permet de générer un fichier « .zip » et qui contiendra les X fichiers sql dont vous avez besoin.
Le premier appel permet de ne prendre que les tables sans les données.
Le second appel prendra TOUTES les tables SAUF celles chargées lors du premier appel.
[cc lang= »php »]
toutes
$tablesNotIn : ne pas exporter celles présentes dans ce tableau
*/
function backup_tables($host, $user, $pass, $name, $NeedData = true, $tables, $tablesNotIn = array())
{
global $path;
$link = mysql_connect($host, $user, $pass);
mysql_select_db($name, $link);
//Table ou vue?
$lsttables = array();
$result = mysql_query(‘SHOW FULL TABLES’);
while ($row = mysql_fetch_row($result)) {
$lsttables[$row[0]] = $row[1];
}
// Toutes les tables ?
if (sizeof($tables) == 0) {
foreach($lsttables as $key => $val){
$tables[] = $key;
}
} else {
$tables = is_array($tables) ? $tables : explode(‘,’, $tables);
}
$content = « »;
//Pour éviter d’avoir des erreurs de clef étrangères
$content = « SET foreign_key_checks = 0; »;
$content .= « \n\n »;
foreach($tables as $table) {
$istable = false;
//Si table n’est pas vide, qu’elle n’est pas dans liste des tables qu’on ne veut pas et que c’est bien une table
if (!empty($table) && !in_array($table, $tablesNotIn) && $lsttables[$table] == « BASE TABLE ») {
$result = mysql_query(‘SELECT * FROM ‘ . $table);
if ($result) {
$num_fields = mysql_num_fields($result);
$row2 = mysql_fetch_row(mysql_query(‘SHOW CREATE TABLE ‘ . $table));
$tmp = « »;
$tmp .= ‘DROP TABLE IF EXISTS ‘ . $table . ‘;’;
$tmp .= « \n\n » . $row2[1] . « ;\n\n »;
for ($i = 0; $i < $num_fields; $i++) { if ($NeedData) { while ($row = mysql_fetch_row($result)) { $tmp .= '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])) { $tmp .= '"' . $row[$j] . '"' ; } else { $tmp .= '""'; } if ($j < ($num_fields - 1)) { $tmp .= ','; } } $tmp .= ");\n"; } } } $tmp .= "\n\n\n"; $content .=$tmp; } } } //Assurez-vous d'avoir les droits en écriture !!! $file = 'db-backup-' . time() . '-' . (md5(implode(',', $tables))) . '.sql'; $handle = fopen($path . $file, 'w+'); fwrite($handle, $content); fclose($handle); return $file; } $filezip = tempnam("tmp", "zip"); $zip = new ZipArchive(); $zip->open($filezip, ZipArchive::OVERWRITE);
for($i=0;$i
}else{
echo « existe pas »;
die();
}
}
$zip->close();
$ZipName = « back. » . time();
header(‘Content-Type: application/zip; charset=utf-8’);
header(‘Content-Length: ‘ . filesize($filezip));
header(‘Content-Disposition: attachment; filename= »‘.$ZipName.’.zip »‘);
readfile($filezip);
unlink($filezip);
//On supprime les fichiers
for($i=0;$i
[/cc]
Vous aurez aussi besoin du fichier zip.lib.php :
http://www.webtutoriaux.com/tutoriel-69-php-compression-de-fichiers-en-php-avec-zip.html
Google Service Analytics : Utiliser OAuth2 authentification et l’API V3 Requêtes préparées avec Mysqli
Les commentaires sont fermés.