Compresser un dossier avec ces sous dossiers

Fran6web
Messages postés
18
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
2 mars 2008
- 10 août 2005 à 12:54
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
- 10 août 2005 à 17:34
Bonjour,

j'ai trouvé sur le site un script vraiment pas mal permettant de faire
un backup de certains dossiers du serveur dans un fichier ZIP (
http://www.phpcs.com/codes/SCRIPT-DE-SAUVEGARDE-AUTOMATIQUE-DES-FICHIERS-RECENEMENT-POSES-SUR-VOTRE-SERVEUR/32805.aspx
). Mais arrivé au derniers dossier, il me marque une première fois
cette erreur:


<strike></strike>Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 4352052 bytes) in /web/htdocs/www.mm2x.com/home/mmfc/pclzip.lib.php on line 2427



et quand je rafraichi la page j'ai cette erreur:

Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 23148438 bytes) in /web/htdocs/www.mm2x.com/home/mmfc/sauvegarde_fichiers.php on line 69



Je vous donne le code de la page sauvegarde.php car je l'ai modifié sachant que mes dossiers ne sont pas les mêmes:

<?



/*

This script is made to synchronise a test server with a production server.

It takes all the file newly uploaded on a server since last execution and servs them in a zip file.

The zip file contains the tree structure of the file. So you just need to unzip the file on your test server

Please think to correctly chmod your $archive_name path

*/

// Name of your archive file :

$archive_name= mktime().'.rar';



// path to archive : (relative path is better but absolute is also possible)

$tab_path_to_arch=array(

'../mmfc/');





// <Read the date of last archive session>

$saved_file = fopen('sauvegarde.cf','r');

$LIMIT_DATE=fread($saved_file,filesize ('sauvegarde.cf'));

fclose($saved_file);

// </Read the date of last archive session>



// Defines is better than global or parameter in function

define('_LIMIT_DATE',$LIMIT_DATE);



// Set the next save date until now.

// IMPORTANT TO DO THIS BEFORE STARTING SAVING

$LIMIT_DATE_FOR_NEXT_TIME=mktime()-3600; // security of one hour for the fun



// user information

echo 'Save new files since :'.date('d/m/y - h:i',$LIMIT_DATE).'
';

echo 'The archive file will be created as : '.$archive_name.'
';



// <Search the file to archive>

$tab_files_to_arch=array('');

foreach($tab_path_to_arch as $lcl_root){

list_dir($lcl_root,$tab_files_to_arch);

echo '
..........................
';

}

// </Search the file to archive>



// <make the archive file>

if (sizeof($tab_files_to_arch)==1) die ('Nothing new today. Exiting');

require('pclzip.lib.php');

$archive = new PclZip($archive_name) or die ("FAUTE initialisation de l'archive");

$archive -> create($tab_files_to_arch) or die ("FAUTE creation archive");

// </make the archive file>



// <save the date for next archive session>

$save_file = fopen('sauvegarde.cf','w');

fwrite($save_file,$LIMIT_DATE_FOR_NEXT_TIME);

fclose($save_file);

// </save the date for next archive session>



// <finishing the script>

$size=round(filesize($archive_name)/1024,2);

echo '



['.$archive_name.' Download the archive file ('.$size.'Ko)]';

// </finishing the script>



// tests the date of a file and adds it to the table if needed

// path : path and name of the file

// file : file name (just for display)

// tableau : address param containing a list of files to compute

// returns none : the table will contain all infos

function test_date($path,$file,&$tableau){

// echo 'file to test : '.$file;

$theone=file($path);

if (filemtime($path) > _LIMIT_DATE) {

$tableau[]=$path;

echo $file.' ';

}

return;

}



// Lists the file of a path (recursive method)

// path : path to scann

// tableau : address param containing a list of files to compute

// returns none : the table will contain all infos

function list_dir ($path,&$tableau){

if ($dir = @opendir($path)) {

echo ' '.$path.'
';

while($file = readdir($dir)) {

if ($file !="." && $file != "..") {



$path_file=str_replace($_SERVER['DOCUMENT_ROOT'],"",$path);

$path_file=str_replace("/","\",$path_file);


if (is_dir($path."/".$file)) { list_dir
($path.'/'.$file, $tableau);}

else { test_date($path.'/'.$file,$file,$tableau); }

}

}

closedir($dir);

} else {

echo $path.' isn\'t dir;';

}

return;

}

?>



J'ai regardé les différents façon de pouvoir corriger ce problème comme par exemple:

<?

//valeur initiale

echo "get_cfg_var(memory_limit) = ".@get_cfg_var('memory_limit')."
";

echo "ini_get(memory_limit) = ".@ini_get('memory_limit')."
";



//modification

@ini_set("memory_limit",'18M');

// on tente d'allouer 18 M



//modification prise en compte ?

echo "get_cfg_var(memory_limit) = ".@get_cfg_var('memory_limit')."
";

echo "ini_get(memory_limit) = ".@ini_get('memory_limit')."
";

// on verifie si l'allocation de 18 M a pu etre possible sur le serveur

?>



Mais la fonction ini_set() semble être désactivé.



Donc si le zip me prend trop de ressource, je me suis dis qu'il valait
mieux y mettre en gz grâce à la ZLIB mais je ne sais pas du tout
comment ça fonctionne. Merci de m'aider

10 réponses

cs_GRenard
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
10 août 2005 à 14:05
Le mieux c'est de contacter l'auteur de la source voir ce qu'il peut
faire parce que un problème de mémoire tu peux pas trouver ca direct
c'est à quelle ligne... Le script PHP va s'arrêter à la ligne où il est
rendu lorsqu'il n'y a plus de mémoire...

Tu ne pourras certainement pas allouer plus que 8M par défaut, disons que c'est toujours bloqué...

, EssayezTestez avant de Poser une question !
http://www.lookstrike.com
0
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
10 août 2005 à 14:50
Salut,



tu ne pourras pas vraiment faire de sauvegarde de gros dossiers ou de
fichiers qui dépassent la taille allouée par PHP, tu peux par contre
passer par FTP et faire des sauvegardes semi-automatiques, lorsque tu
cliques sur un lien de ton site tu mets un serveur FTP chez toi qui
rapatrie les fichiers sur le FTP distant, par exemple.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
Fran6web
Messages postés
18
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
2 mars 2008

10 août 2005 à 15:58
Le soucis c'est que j'ai pas accée au FTP! J'ai seulement un script php pour mettre des fichiers.

Et puis l'auteur de la librairie est un anglais donc...
0
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
10 août 2005 à 16:32
Donc tu bois le bouillon
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Fran6web
Messages postés
18
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
2 mars 2008

10 août 2005 à 16:40
Sinon si je bois ce "bouillon" pas très bon lol!

Il n'y aurai pas un moyen que le script évite le dossier qui me pose ce problème pour que le reste s'enregistre normalement?
0
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
10 août 2005 à 16:49
Si si tu scannes la taille totale des fichiers du dossier, avec une fonction récursive ça peut le faire :-)
0
Fran6web
Messages postés
18
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
2 mars 2008

10 août 2005 à 16:54
Mais malheureusement je ne sais pas ou y placer!
0
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
10 août 2005 à 16:58
? ça veut dire quoi ça ?
0
Fran6web
Messages postés
18
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
2 mars 2008

10 août 2005 à 17:07
En faite je ne sais pas ou placer le code pour éviter le dossier qui me pose problème!
0
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
10 août 2005 à 17:34
bah ça c'est pas moi qui vais te le dire, il faut placer ça à la racine des dossiers à ajouter
0