Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: david62 le le 05-12-2007 a 17:18:04

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.