FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » Génération zip a la volée ( trés lent... )
 

Génération zip a la volée ( trés lent... )

Il y a 394 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Génération zip a la volée ( trés lent... )
 
Plus d'informations

Salut à tous,
 
J'ai un problème avec un script de génération de fichier zip à la volée, utilisant la librairie de phpmyadmin.
 
Je trouve la génération du fichier zip anormalement lent.
 
La génération d'un zip contenant 2 mp3 de 15mo met environ 30s, pourtant la création d'un fichier tar (en ligne de cmd) est trés rapide !
 
Je me demande si la désactivation de la compression résoudrais le probléme.
 
Note : j'utilise un serveur dédié Kimsufi ( 256mo de ram seulement, Intel  Celeron 2.00 GHz)
 
Voici le code utilisé :
 

Code :
  1. <?
  2. $dossier="upload/";
  3. /*
  4. Constitution du tableau $tab_achat, qui contient le nom (et arborescence des achats),
  5. ainsi que le chemin réel (relatif) du fichier.
  6. */
  7. $cpt_achat = 0;
  8. $len_achat = 0;
  9. $verif=count($_SESSION['cart_sess']);
  10.                          
  11. if(isset($_SESSION['cart_sess']) && $verif >0)
  12.     {
  13.      include("inc/copyrights.php" );
  14.      for ($i=0;$i<(count($_SESSION['cart_sess']));$i++)
  15.         {
  16.          
  17.          
  18.             $title = $_SESSION['cart_sess'][$i]['title_sess'];
  19.             $id = $_SESSION['cart_sess'][$i]['art'];
  20.            
  21.            
  22.             if($_SESSION['cart_sess'][$i]['type_sess'] == "album" )
  23.             {
  24.                //recherche des pistes contenu dans cet album
  25.                $req = mysql_query("SELECT title_trackods, filename_trackods, sizefile_trackods FROM trackods WHERE id_albumods='$id'" );   
  26.                while($row = mysql_fetch_array($req))
  27.                {
  28.                    $filename_trackods = $row["filename_trackods"];
  29.                    $title_trackods = $row["title_trackods"]; 
  30.                    $extension = substr($filename_trackods,-4); 
  31.                    
  32.                    $tab_achat[$cpt_achat]['name']=$title."/".$title_trackods.$extension;
  33.                    $tab_achat[$cpt_achat]['file']=$filename_trackods;
  34.                    $len_achat+=$row["sizefile_trackods"];
  35.                  
  36.                    $cpt_achat++;             
  37.                }
  38.                                                                      
  39.             }
  40.             else
  41.             {
  42.                 $req = mysql_query("SELECT filename_trackods, sizefile_trackods FROM trackods WHERE id_trackods='$id'" );   
  43.                 $row = mysql_fetch_array($req);
  44.                
  45.                 $filename_trackods = $row["filename_trackods"];
  46.                 $extension = substr($filename_trackods,-4);
  47.                
  48.                 $tab_achat[$cpt_achat]['name']="Titre_a_la_carte/".$title.$extension;
  49.                 $tab_achat[$cpt_achat]['file']=$filename_trackods;
  50.                 $len_achat+=$row["sizefile_trackods"];
  51.                
  52.                 $cpt_achat++; 
  53.             }
  54.         }
  55.        
  56.      
  57.  
  58.    //print_r ($tab_achat);  
  59.    //echo $len_achat;
  60.  
  61. // appel de la classe
  62. require_once('inc/zip.lib.php');
  63.  
  64. // création d'un objet 'zipfile'
  65. $zip = new zipfile();
  66. for($i=0;$i<(count($tab_achat));$i++)
  67. {
  68.    
  69.     $filename =  $tab_achat[$i]['name'];
  70.     $file = $dossier.$tab_achat[$i]['file']; //chemin complet  
  71.    
  72.     // contenu du fichier
  73.     $fp = fopen ($file, 'r');
  74.     $content = fread($fp, filesize($file));
  75.     fclose ($fp);
  76.    
  77.     // ajout du fichier dans cet objet
  78.     $zip->addfile($content, $filename);
  79.      
  80.     // production de l'archive' Zip
  81.     $archive = $zip->file();
  82. }
  83.     // entêtes HTTP
  84.     // force le téléchargement
  85.     //header('Content-Disposition: inline; filename=plus3db.com_commande_mp3.zip');  
  86.          
  87.     header('Content-Type: application/x-zip');
  88.     header("Content-Disposition: attachment; filename=plus3db.com_commande_mp3.zip" ); //laisse le choix à l'utilisateur
  89.     header("Content-Transfer-Encoding: binary" );
  90.     header('Content-Length: '.$len_achat.'');                   
  91.     header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  92.     header('Pragma: public');
  93.     header("Expires: 0" );
  94.    
  95. // envoi du fichier au navigateur
  96.     echo $archive; 
  97.    
  98. }


 
Merci d'avance pour votre aide


Message édité par dtom le 15-08-2007 à 19:21:22

Guitariste Disco-Metal
Plus d'informations

Oui évidemment  que c'est la compression qui prend du temps, le tar c'est juste de l'archivage donc pas de compression.

Plus d'informations

Oui mais le tar je le fesais directement en ligne de commande, le zip, depuis un script php à la volée.
 
Que faut-il modifier dans la fonction pour retirer la compression zip ?

pourquoi faire cent fois la même chose ?
Plus d'informations

tout ce qu'il y a dans ce code qui peut le ralentir :
 
- l'archive zip est régénérée à chaque fichier ajoutée
- stockage du fichier à zipper dans la RAM
- stockage du fichier zip dans la RAM (en plus du fichier à zipper !)
 
moi, si je voulais zipper j'utiliserais plutôt http://fr.php.net/zip

Plus d'informations

Merci pour ta réponse rapide.
 
J'ai essayé d'installer zziplib, sans succés :
 

Code :
  1. [root@www /]# php -m
  2. PHP Warning:  Unknown(): Unable to load dynamic library './zip.so' - ./zip.so: cannot open shared object file: No such file or directory in Unknown on line 0
  3. [PHP Modules]
  4. bcmath
  5. calendar


 
Le fichier que j'ai récup est : zziplib-0.10.82.tar.bz2
 
J'ai essayé de suivre ce guide : http://julp.developpez.com/php/zip/
 
Mais je me perd dans les chemins...
 
En fesant un find -iname php, j'obtient ces chemins :
 
./usr/local/bin/php
./usr/local/include/php
./usr/local/lib/php
 
Je me tâte entre /bin et /lib...
 
Peut tu m'éclairer ?
 
PS :  
Red Hat Linux release 7.2 (Enigma)
 
[root@www /]# php info
PHP Warning:  Unknown(): Unable to load dynamic library './zip.so' - ./zip.so: cannot open shared object file: No such file or directory in Unknown on line 0
Status: 404
X-Powered-By: PHP/4.4.4
Content-type: text/html; charset=utf-8
 
No input file specified.
 
 
 
 
 
 

pourquoi faire cent fois la même chose ?
Plus d'informations

quelle version de php utilise tu ? y a t'il pas de paquet zziplib dans redhat ?

zeb
Profil : Modérateur libre
Plus d'informations

Citation :

Je me tâte entre /bin et /lib


/lib !!!


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

j'utilise la version 4.4.4, comme j'ai indiqué ci dessus

Plus d'informations

rebonjour,
 
j'ai toujours pas réussi a installer zziplib...
 
je me suis mis dasn le dossier décompresser de zziplib, et j'ai ceci :
 
 Setting up ZZIPLIB
 
        * Extract files from zziplib-0.10.82.tar.bz2 to a new folder.
        * ./configure --enable-static
        * make
        * make install
 
 
mais je bloque au niveau suivant... je sais pas trop quoi faire, si il faut par exemple couper le service httpd et surtout quel commande taper
 
 
 Rebuilding PHP to include ZIP support
 
        * Modify PHP build file and add "--with-zip" [no dir needed because default /usr/local on my machine]
        * make
        * make install
 
 
merci d'avance


Message édité par dtom le 10-09-2007 à 23:08:29
Plus d'informations

up :(

Plus d'informations

up

zeb
Profil : Modérateur libre
Plus d'informations

down


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...

Aller à :
  FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » Génération zip a la volée ( trés lent... )
 

Annonces Google
Publicité
Les ressources relatives