Titre: Sauvegarde PHP d'un dossier et de ses sous-dossiers
Posté par: david62 le le 05-12-2007 a 17:18:04
Bonjour,
Actuellement, j'utilise le script suivant (Cf. ci-dessous) pour sauvegarder des éléments de mon site. Il fonctionne à merveille mais je ne parviens pas à sauvegarder les sous-dossiers présents dans le dossier. Est-ce que quelqu'un pourrait me dire ce qu'il faut changer dans le script ci-dessous et m'indiquer où doit s'opérer le changement. J'ai bourlingué sur différents forums et sources et je ne trouve pas la solution. Si la sauvegarde d'un sous-répertoire est impossible en PHP me dire.
J'utilise la classe zip.lib.php et la classe mime_mail.class.php
Merci
David62
Copie du script utilisé :
<?php // Adresse mail pour envoi de la sauvegarde $mail = ""; // Place du répertoire concerné par la sauvegarde dans l'arborescence de votre site // exemple : si vous souhaitez sauvegarder un dossier images se situant au même niveau que le dossier qui // le fichier zip_repertoire.php $rep = "../images/"; $rep = ""; // Nom explicite pour identifier le répertoire sauvegardé // ce nom figurera dans l'objet du mail de sauvegarde reçu et permettra d'identifier précisément // le répertoire sauvegardé // exemple : cf/ ci-dessus $fichiers = "images du site"; $fichiers = "";
// Définition de la date function date_fr($date=0) { if(!$date) $date=date("Y-m-d H:i:s"); //Timestamp courant par défaut
$a = substr($date, 0, 4); $m = substr($date, 5, 2); $j = substr($date, 8, 2); $h = substr($date, 11, 2); $min = substr($date, 14, 2); $s = substr($date, 17, 2); $datefr=$j.'/'.$m.'/'.$a; $heurefr=$h.':'.$min; return array("date"=>$datefr,"heure"=>$heurefr); }
$date = date_fr(); $datejour = $date["date"]." - ".$date["heure"];
require("zip.lib.php") ; //indiquez le chemin d'accès à la librairie
$zip = new zipfile() ; //on crée un fichier zip
if ($dir = @opendir($rep)) { while (($file = readdir($dir)) !== false) { if($file != ".." && $file != ".") { $filename[] = $file; } } closedir($dir); } //Test a faire pour ne pas avoir d'erreur si il n'y a pas d'image dans le dossier if(sizeof($filelist) != '0') { sort($filelist); }
$a = 0 ; while(count($filename)>$a) { $fp = fopen($rep.$filename[$a],'r') ; //on ouvre le fichier en lecture seule $contenu = fread($fp, filesize($rep.$filename[$a])) ; //on enregistre le contenu fclose($fp) ; //on ferme FTP
$zip->addfile($contenu, $filename[$a]) ; //on ajoute le fichier $a++; //on incrémente $a }
// Sauve le zip $f2=fopen($fichiers.".zip","w"); fputs($f2,$zip -> file()); fclose($f2);
// ENVOI LE ZIP EN PJ
include("mail.php");
sendmail("","","",$mail,"","","Sauvegarde du répertoire des $fichiers - $datejour","Sauvegarder ce fichier en incluant la date du jour et l'heure dans le nom de l'archive",$fichiers.".zip");
echo "<p align='center'><b>Envoi de la sauvegarde effectué !</b></p><br>";
?>
|
Titre: Re:Sauvegarde PHP d'un dossier et de ses sous-dossiers
Posté par: TonTon FluBB le le 07-12-2007 a 13:27:38
Salut,
Si tu veux ajouter les sous dossiers dans ta sauvegarde, tu dois parcourir le dossier récursivement, c'est à dire parcourir tous les sous dossiers également.
Niveau code, lorsque tu parcours ton dossier principal, tu test si il s'agit d'un fichier u d'un dossier (is_dir(), is_file()).
Si c'est un fichier tu l'ajoute à ta sauvegarde, si c'est un dossier tu le parcours de la même façon que le dossier principal. |
Titre: Re:Sauvegarde PHP d'un dossier et de ses sous-dossiers
Posté par: david62 le le 07-12-2007 a 14:20:33
Bonsoir,
Ai trouvé la solution ? Voir ci-dessous
Merci
David
<?php
// Adresse mail pour envoi de la sauvegarde $mail = ""; // Place du répertoire concerné par la sauvegarde dans l'arborescence de votre site // exemple : si vous souhaitez sauvegarder un dossier images se situant au même niveau que le dossier qui // le fichier zip_repertoire.php $rep = "../images/"; $rep = ""; // Nom explicite pour identifier le répertoire sauvegardé // ce nom figurera dans l'objet du mail de sauvegarde reçu et permettra d'identifier précisément // le répertoire sauvegardé // exemple : cf/ ci-dessus $fichiers = "images du site"; $fichiers = "";
set_time_limit (1000); // temps maximum d'exécution du script
// Définition de la date function date_fr($date=0) { if(!$date) $date=date("Y-m-d H:i:s"); //Timestamp courant par défaut
$a = substr($date, 0, 4); $m = substr($date, 5, 2); $j = substr($date, 8, 2); $h = substr($date, 11, 2); $min = substr($date, 14, 2); $s = substr($date, 17, 2); $datefr=$j.'/'.$m.'/'.$a; $heurefr=$h.':'.$min; return array("date"=>$datefr,"heure"=>$heurefr); }
$date = date_fr(); $datejour = $date["date"]." - ".$date["heure"];
require("zip.lib.php") ; //indiquez le chemin d'accès à la librairie
$zip = new zipfile() ; //on crée un fichier zip
function zipDir($rep,&$zip) { if (!is_dir($rep)) return; if (!($dir = @opendir($rep))) { echo("<b>ERREUR: Une erreur s'est produite sur ".$rep."</b><br />"); return; } while ($file = readdir($dir)) { if ($file == "." || $file == "..") continue; if (is_dir($rep."/".$file)) { zipDir($rep."/".$file,$zip,$i); } elseif (is_file($rep."/".$file)) { $zip->addFile(file_get_contents($rep."/".$file),$rep."/".$file); } } }
zipDir($rep,$zip); $filezipped=$zip->file(); $open = fopen($fichiers.".zip", "w"); fwrite($open, $filezipped); fclose($open);
// ENVOI LE ZIP EN PJ
include("mail.php");
sendmail("","","",$mail,"","","Sauvegarde du répertoire des $fichiers - $datejour","Sauvegarder ce fichier en incluant la date du jour et l'heure dans le nom de l'archive",$fichiers.".zip");
unlink ($fichiers.".zip");
echo "<p align='center'><b>Envoi de la sauvegarde effectué !</b></p><br>";
?> |
Titre: Re:Sauvegarde PHP d'un dossier et de ses sous-dossiers
Posté par: TonTon FluBB le le 08-12-2007 a 12:05:33
| Merci d'avoir répondu à ma place, je n'avais pas le temps. |
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|