Compression récursive en PHP

  • Auteur de la discussion Auteur de la discussion sky
  • Date de début Date de début
WRInaute discret
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
 
WRInaute impliqué
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...
 
WRInaute discret
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
 
WRInaute occasionnel
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 :)
 
WRInaute discret
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:
<?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);
?>
 
WRInaute discret
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 :)
 
WRInaute occasionnel
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à
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut