Phpbackupmysqldiff 1.1 > PhpBackupMySQLdiff / Restore.php

Questions? Need Help? Want to share? » PHP Forum
Script Name:
Phpbackupmysqldiff 1.1

Download:
phpbackupmysqldiff-1.1.zip

Category:
Database Tools

Archive Content:

PhpBackupMySQLdiff

PhpBackupMySQLdiff > Docs

PhpBackupMySQLdiff > Img

PhpBackupMySQLdiff > Inc

PhpBackupMySQLdiff

PhpBackupMySQLdiff > Lang

PhpBackupMySQLdiff > Lib > Db

PhpBackupMySQLdiff > Lib

PhpBackupMySQLdiff

Restore.php:


<?php
/**universal
 * Restauration des données contenu dans les fichies XML
 * 
 * @author Thomas Pequet
 * @version 1.0 
 */

// Repertoire dans lequel on est par rapport à la racine du site
$rep_par_rapport_racine "";

// Identifant de la page (0,  ou 1,  ...)
$page "3";

// Temps limite d'execution du script en secondes
@set_time_limit(300);

// Fichiers à inclure dans la page
@session_start();
include_once(
$rep_par_rapport_racine."inc/fonctions.inc.php");
include(
$rep_par_rapport_racine."inc/config.inc.php");
//include($rep_par_rapport_racine.$ficConnBase);
include($rep_par_rapport_racine."lang/".$langue.".inc.php");
include(
$rep_par_rapport_racine."inc/img.inc.php");
include_once(
$rep_par_rapport_racine."lib/archive.php");
include_once(
$rep_par_rapport_racine."lib/fichier.php");

// Constantes de la page (en majuscules)

// Variables de la page
$infos "";
$erreur "";
$data "";
$structure "";
if (!isset(
$jourDeb))
    
$jourDeb 1;
if (!isset(
$moisDeb))
    
$moisDeb date("n");
if (!isset(
$anneeDeb))
    
$anneeDeb date("Y");
if (!isset(
$jourFin))
    
$jourFin date("t");
if (!isset(
$moisFin))
    
$moisFin date("n");
if (!isset(
$anneeFin))
    
$anneeFin date("Y");    
// Tableau conprenant les dates (Ymd) à restaurer
$tabDateYmd = array();
for (
$i=mktime(12, 0, 0, $moisFin, $jourFin, $anneeFin);$i>=mktime(12, 0, 0, $moisDeb, $jourDeb, $anneeDeb);$i=$i-24*60*60) {
    if (!isset(
$tabDateYmd[date("Ym",  $i)]))
        
$tabDateYmd[date("Ym",  $i)] = array();
    
$tabDateYmd[date("Ym",  $i)][sizeof($tabDateYmd[date("Ym",  $i)])] = date("d",  $i);
}
// Définition des tableau qui contiendra le code Xml et Dtd des fichiers à restaurer
$structureXml = array();
//$structureDtd = array();
$dataXml = array();
$dataDtd = array();
$tempsPageDeb time();
// Chargement des paramètres de restauration contenu dans le fichier XML
$options chargerConfig($rep_par_rapport_racine.$ficConfigRestauration);

// Fonctions de la page

// Actions de la page
if (isset($nomconfig) && isset($options[$nomconfig])) {
    if (
is_dir($options[$nomconfig]["dossier"])) {
        
// Définition des bases à restaurer
        
if (is_array($options[$nomconfig]["tables"]))
            
$bases_keys array_keys($options[$nomconfig]["tables"]);    
        else
            
$bases_keys = array();    
        
// Définition des dates (année mois) à parcourir
        
if (is_array($tabDateYmd))
            
$Ym_keys array_keys($tabDateYmd);    
        else
            
$Ym_keys = array();    
        
// Parcours des bases
        
for ($i=0;$i<sizeof($bases_keys);$i++) {
            
// Vérification que le dossier de la base existe
            
if (is_dir($options[$nomconfig]["dossier"]."/".$bases_keys[$i])) {        
                
// Selection des tables de la base de données
                
$tables_keys array_keys($options[$nomconfig]["tables"][$bases_keys[$i]]);        
                
// Parcours de la table des dates à analyser
                
for ($j=0;$j<sizeof($Ym_keys);$j++) {
                    
// Vérification que le dossier de la Ym existe
                    
if (is_dir($options[$nomconfig]["dossier"]."/".$bases_keys[$i]."/".$Ym_keys[$j])) {        
                        
// Parcours de la liste des tables de la base
                        
for ($k=0;$k<sizeof($tables_keys);$k++) {
                            
// Vérification que le dossier de la table existe
                            
if (is_dir($options[$nomconfig]["dossier"]."/".$bases_keys[$i]."/".$Ym_keys[$j]."/".$tables_keys[$k])) {
                                
// Recupération de la liste des fichiers dossier
                                
$listeFichiers = array();
                                
$handle = @opendir($options[$nomconfig]["dossier"]."/".$bases_keys[$i]."/".$Ym_keys[$j]."/".$tables_keys[$k]);
                                while (
$fichierTmp = @readdir($handle)){        
                                    if(
is_file($options[$nomconfig]["dossier"]."/".$bases_keys[$i]."/".$Ym_keys[$j]."/".$tables_keys[$k]."/".$fichierTmp) && ereg("(zip|tar.gz|tar|tgz)$",  $fichierTmp)) {
                                        
$listeFichiers[sizeof($listeFichiers)] = $fichierTmp;
                                    }
                                }
                                @
closedir($handle);
                                
// Effacer le cache
                                
clearstatcache();
                                
// Tri du tableau des fichiers en ordre inverse par rapport au nom des fichiers
                                
arsort($listeFichiers);
                                
//print_r($listeFichiers);
                                // Parcours de la liste des fichiers
                                
$fichiers_keys array_keys($listeFichiers);
                                for (
$l=0;$l<sizeof($fichiers_keys);$l++) {
                                    
// Vérification que ce fichier est dans la période à restaurer
                                    
if (in_array(substr($listeFichiers[$fichiers_keys[$l]], 0, 2), $tabDateYmd[$Ym_keys[$j]])) {
                                        
// Fichier contenant la structure de la table
                                        
if (($options[$nomconfig]["infos"]=="structure" || $options[$nomconfig]["infos"]=="data") && ereg("structure", $listeFichiers[$fichiers_keys[$l]])) {
                                            
// Vérification que cette structure n'a pas déjà été restaurée
                                            
if (!isset($structureXml[$bases_keys[$i]][$tables_keys[$k]])) {
                                                
// Ouverture du fichier
                                                
$archiveTmp = new archive($options[$nomconfig]["dossier"]."/".$bases_keys[$i]."/".$Ym_keys[$j]."/".$tables_keys[$k],  $listeFichiers[$fichiers_keys[$l]]);
                                                
// Extraire des fichiers
                                                
$archiveTmp->extraire_fichier($rep_tmp,  "",  $Ym_keys[$j].ereg_replace("(zip|tar.gz|tar|tgz)$",  "xml",  $listeFichiers[$fichiers_keys[$l]]));
                                                
//$archiveTmp->extraire_fichier($rep_tmp,  "",  $Ym_keys[$j].ereg_replace("(zip|tar.gz|tar|tgz)$",  "dtd",  $listeFichiers[$fichiers_keys[$l]]));
                                                
$archiveTmp->extraire_fichier($rep_tmp,  "",  $Ym_keys[$j].ereg_replace("structure.(zip|tar.gz|tar|tgz)$",  "data.dtd",  $listeFichiers[$fichiers_keys[$l]]));
                                                
// Création d'un objet Fichier
                                                
$fichierTmp = new fichier($rep_tmp,  $Ym_keys[$j].ereg_replace("(zip|tar.gz|tar|tgz)$",  "xml",  $listeFichiers[$fichiers_keys[$l]]));
                                                
// Récupération du contenu
                                                
$structureXml[$bases_keys[$i]][$tables_keys[$k]] = $fichierTmp->lire("r");
                                                
// Supprimer le fichier
                                                
$fichierTmp->supprimer();
                                                
// Création d'un objet Fichier
                                                //$fichierTmp = new fichier($rep_tmp,  $Ym_keys[$j].ereg_replace("(zip|tar.gz|tar|tgz)$",  "dtd",  $listeFichiers[$fichiers_keys[$l]]));
                                                // Récupération du contenu
                                                //$structureDtd[$bases_keys[$i]][$tables_keys[$k]] = $fichierTmp->lire("r");
                                                // Supprimer le fichier
                                                //$fichierTmp->supprimer();
                                                // Création d'un objet Fichier
                                                
$fichierTmp = new fichier($rep_tmp,  $Ym_keys[$j].ereg_replace("structure.(zip|tar.gz|tar|tgz)$",  "data.dtd",  $listeFichiers[$fichiers_keys[$l]]));
                                                
// Récupération du contenu
                                                
$dataDtd[$bases_keys[$i]][$tables_keys[$k]] = $fichierTmp->lire("r");
                                                
// Supprimer le fichier
                                                
$fichierTmp->supprimer();
                                                
                                                unset(
$archiveTmp);
                                                unset(
$fichierTmp);
                                            }
                                            
                                        
// Fichier contenant les données de la table
                                        
} else if (($options[$nomconfig]["infos"]=="data" || $options[$nomconfig]["infos"]=="dataonly") && ereg("data", $listeFichiers[$fichiers_keys[$l]])) {
                                            
// Ouverture du fichier
                                            
$archiveTmp = new archive($options[$nomconfig]["dossier"]."/".$bases_keys[$i]."/".$Ym_keys[$j]."/".$tables_keys[$k],  $listeFichiers[$fichiers_keys[$l]]);
                                            
// Extraire le fichier XML
                                            
$archiveTmp->extraire_fichier($rep_tmp,  "",  $Ym_keys[$j].ereg_replace("(zip|tar.gz|tar|tgz)$",  "xml",  $listeFichiers[$fichiers_keys[$l]]));
                                            
// Création d'un objet Fichier
                                            
$fichierTmp = new fichier($rep_tmp,  $Ym_keys[$j].ereg_replace("(zip|tar.gz|tar|tgz)$",  "xml",  $listeFichiers[$fichiers_keys[$l]]));
                                            
// Récupération du contenu
                                            
$dataXml[$bases_keys[$i]][$tables_keys[$k]][sizeof($dataXml[$bases_keys[$i]][$tables_keys[$k]])] = $fichierTmp->lire("r");
                                            
// Supprimer le fichier
                                            
$fichierTmp->supprimer();
                                            
                                            unset(
$archiveTmp);
                                            unset(
$fichierTmp);
                                        }                                            
                                    }                                    
                                }
                                unset(
$listeFichiers);
                                unset(
$fichiers_keys);
                            } else {
                                
$erreur .= str_replace(array("##base##", "##table##", "##mois##", "##annee##"),  array($bases_keys[$i], $tables_keys[$k], $nomMois[substr($Ym_keys[$j], 4, 2)], substr($Ym_keys[$j], 0, 4)),  $message5)."<BR>";
                            }
                            
// Effacer le cache
                            
clearstatcache();
                        }
                    } else {
                        
$erreur .= str_replace(array("##base##", "##mois##", "##annee##"),  array($bases_keys[$i], $nomMois[substr($Ym_keys[$j], 4, 2)], substr($Ym_keys[$j], 0, 4)),  $message4)."<BR>";
                    }
                    
// Effacer le cache
                    
clearstatcache();                
                }
                unset(
$tables_keys);
            } else {
                
$infos .= str_replace("##base##",  $bases_keys[$i],  $message3)."<BR>";
            }
            
// Effacer le cache
            
clearstatcache();
        }
        unset(
$bases_keys);
        unset(
$Ym_keys);
    } else {
        
$erreur .= str_replace("##rep##",  $options[$nomconfig]["dossier"],  $message2)."<BR>";
    }
    
// Effacer le cache
    
clearstatcache();

} else {
    
$erreur .= str_replace("##fic##",  $ficConfigRestauration,  $message1)."<BR>";
}
unset(
$tabDateYmd);

// Vérification que des informations sont à restaurer
if (sizeof($structureXml)>0) {
    
//echo "<PRE>";print_r($structureXml);echo "</PRE>";
    // Parcours des bases
    
$bases_keys array_keys($structureXml);    
    for (
$i=0;$i<sizeof($bases_keys);$i++) {
        
// Parcours des tables
        
$tables_keys array_keys($structureXml[$bases_keys[$i]]);
        for (
$j=0;$j<sizeof($tables_keys);$j++) {
            
// Parcours des données
            
for ($k=0;$k<sizeof($structureXml[$bases_keys[$i]][$tables_keys[$j]]);$k++) {
                
$structure .= xml2sqlCreate($bases_keys[$i],  $structureXml[$bases_keys[$i]][$tables_keys[$j]],  $droptable,  $proteger,  $ajouternombase);
            }
            
$infos .= str_replace(array("##base##", "##table##"),  array($bases_keys[$i], $tables_keys[$j]),  $message6)."<BR>";
        }
        unset(
$tables_keys);
    }    
    unset(
$bases_keys);
} else {
    
$structure "# ".$message8;
}
unset(
$structureXml);

if (
sizeof($dataXml)>0) {
    
//echo "<PRE>";print_r($dataXml);echo "</PRE>";
    // Parcours des bases
    
$bases_keys array_keys($dataXml);    
    for (
$i=0;$i<sizeof($bases_keys);$i++) {
        
// Parcours des tables
        
$tables_keys array_keys($dataXml[$bases_keys[$i]]);
        for (
$j=0;$j<sizeof($tables_keys);$j++) {
            
$nb 0;
            
// Parcours des données
            
for ($k=0;$k<sizeof($dataXml[$bases_keys[$i]][$tables_keys[$j]]);$k++) {
                
$dataTmp xml2sqlInsert($bases_keys[$i],  $dataXml[$bases_keys[$i]][$tables_keys[$j]][$k],  $dataDtd[$bases_keys[$i]][$tables_keys[$j]],  $proteger,  $ajouternombase,  $options[$nomconfig]["requete"]);
                 
$data .= $dataTmp["sql"];
                
$nb $nb $dataTmp["nb"];
            }            
            
$infos .= str_replace(array("##nb##", "##base##", "##table##"),  array($nb, $bases_keys[$i], $tables_keys[$j]),  $message7)."<BR>";            
        }
        unset(
$tables_keys);    
    }
    unset(
$bases_keys);
} else {
    
$data "# ".$message9;
}
unset(
$dataXml);
unset(
$dataDtd);

// Affichage en mode texte
if ($affichage=="texte") {

    
// Envoie des en-têtes
    
header("Content-Type: application/force-download");
    
header("Content-Type: application/octet-stream");        
    
//header("Content-Type: text/plain");
    
header("Content-Length: ".strlen($structure."\n\n".$data));                
    
header("Content-Disposition: attachment; filename=restore.txt");

    echo 
$structure."\n\n".$data;

    die();

// Affichage en mode Html
} else {

    
// Affichage des en-têtes (normalement avant ce include,  rien n'est affiché)
    
include($rep_par_rapport_racine."inc/header.inc.php"); 
    
    echo 
"<HR>";
    echo 
"<U>".$texteInfos.":</U><BR><A CLASS=\"vert\">".$infos."</A>";
    echo 
"<HR SIZE=\"1\">";
    echo 
"<U>".$texteErreurs.":</U><BR><A CLASS=\"rouge\">".$erreur."</A>";
    echo 
"<HR>";
?>
<FORM NAME="<?=$PHP_SELF;?>?action=executer" METHOD="post" ACTION="">
<B><?=$texte1;?></B>
<TEXTAREA NAME="structure"<?=$taille_textarea1;?> ROWS="20" WRAP="off">
<?=$structure;?>
</TEXTAREA>
<BR>
<BR>
<B><?=$texte2;?></B>
<TEXTAREA NAME="structure"<?=$taille_textarea1;?> ROWS="40" WRAP="off">
<?=$data;?>
</TEXTAREA>
</FORM>
<?
    
// Affichage du temps d'éxécution de la page
    
echo $texteTmeps.": ".date("i:s",  (time()-$tempsPageDeb))."\n";

    
// Affichage du pied de page
    
include($rep_par_rapport_racine."inc/footer.inc.php");     
}
?>


Other Database Tools Scripts:

WebMaster Resources Home

©RingsWorld.com