Compression récursive en PHP

sky
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 260
Inscription: 3 Mar 2003

Compression récursive en PHP

Message le Sam Nov 26, 2005 19:59

Bonjour

J'essaye de trouver un moyen de compresser un répertoire avec des fichiers à l'intérieur avec PHP.
En utilisant GZIP, j'arrive à compresser 1 seul fichier, mais pas plus.

est ce quelqu'un connais une autre méthode ou un autre moyen pour faire ceci ?

Merci d'avance,
Sky


yuston
WRInaute impliqué
WRInaute impliqué
 
Messages: 800
Inscription: 24 Sep 2004

Message le Sam Nov 26, 2005 20:10

Moi je te conseille de voir un peu dans la librairie de phpmyadmin car phpmyadmin offre la possibilité de compresser les données à exporter... par contre je ne sais pas si cela va t'aider...

sky
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 260
Inscription: 3 Mar 2003

Message le Sam Nov 26, 2005 20:15

Slt

Oui, j'ai trouvé cette lib, elle est vachement sympa, mais pour ce que je veut en faire ça ne va pas car pas tout le monde à accée aux lib de phpmyadmin.

Il me faudrai qqchose que la plupart des hébergeurs aurais de base. Je pensé pas avoir autant de mal à trouver comment faire une compression récursive ^^

Surtout que la lecture récursive d'un .zip ou gzip est relativement simple :)

Sky

ChezThierry
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 273
Inscription: 21 Oct 2005

Message le Sam Nov 26, 2005 20:22

Le problème, c'est que gzip ne compresse qu'un fichier, contrairement à ZIP. Son but était (et il y a réussi) de remplacer l'utilitaire unix compress qui, lui aussi, ne fonctionne qu'1 fichier par 1 fichier.

Sous unix, du coup, pour créer une archive compressé de tout un répertoire, on utilise conjointement tar et gzip, tar "collant" tous les fichiers en 1 seul fichier non compressé, et gzip compressant le résultat de tar, comme ça, chacun fait son boulot et le fait bien :)

sky
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 260
Inscription: 3 Mar 2003

Message le Sam Nov 26, 2005 20:31

ok, merci :)
je vais donc juste inclure cette librairie de phpmyadmin dans mon script ... zut :)
Merci en tout cas...

Pour ceux qui chercherai, voici qq, voici un script qui compresse un répertoire avec cette lib :

Code: Tout sélectionner
<?php
require_once("zip.lib.php");       // librairie zip.lib, que l'on trouve avec phpmyadmin

$fichier_zip = "zip.zip";         // nom du fichier zip que l'on veut
$zip= new zipfile;
$path = "repertoire";            // repertoire que l'on veut zipper

set_time_limit (1000);            // a parametrer selon vos souhaits

function zipDir($path,&$zip)
{
   
   if (!is_dir($path)) return;
   
   if (!($dh = @opendir($path))) {
      echo("<b>ERREUR: Une erreur s'est produite sur ".$path."</b><br />");
      return;
   }
   while ($file = readdir($dh)) {
     
      if ($file == "." || $file == "..") continue; // Throw the . and .. folders
      if (is_dir($path."/".$file)) { // Recursive call
         zipDir($path."/".$file,$zip,$i);   
      } elseif (is_file($path."/".$file)) { // If this is a file then add to the zip file
         
         $zip->addFile(file_get_contents($path."/".$file),$path."/".$file);
         //echo('fichier '.$path.'/'.$file.' ajouté<br>');
      }
      }
}

zipDir($path,$zip);
$filezipped=$zip->file();       // On recupere le contenu du zip dans la variable $filezipped
$open = fopen($fichier_zip, "w");    // On la sauvegarde dans le meme repertoire que les fichiers a zipper
fwrite($open, $filezipped);
fclose($open);
?>

sky
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 260
Inscription: 3 Mar 2003

Message le Sam Nov 26, 2005 21:49

Vous savez pas quoi?
Pour compresser ... en fin de compte, c'est lib est vraiment sympathique.
Par contre, elle décompresse pas :D
Pour décompresser, il faut installer zlib ....

Vous saurez pas comment on compresse un fichier en tar.gz en php svp ?

Merci :)


Digit
WRInaute impliqué
WRInaute impliqué
 
Messages: 613
Inscription: 18 Avr 2003

Message le Sam Nov 26, 2005 22:40

Attention à la conso mémoire lors de la compression. Si je me souviens bien, ça ne passe pas par un fichier temporaire, donc la compression d'un répertoire correspond à stocker en mémoire le zip final avant qu'il ne soit écrit sur disque. Un gros répertoire vous fera planter votre script si vous avez des quotas comme sur un hébergement mutualisé.

Faire un .tar.gz doit être techniquement plus simple car le .tar ajoute quelques entête, et copie tel quel le fichier, et le .gz est réalisable par les fonctions natives de php. Ca doit donc facilement se trouver sur google : il y a au moins celle-ci ou celle là


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités