compression zip

compression zip - PHP - Programmation

Marsh Posté le 28-02-2005 à 19:31:48    

Salut tout le monde!  :)  
 
Je souhaite écrire un script pour compresser un fichier au format zip.  
Pour cela, j'utilise ce formulaire :
 
<form enctype="multipart/form-data" action="upload.php" method="post">  
               
<input type="hidden" name="MAX_FILE_SIZE" value="4000000">  
<input name="uploadfile" type="file" size="50">  
<input type="submit" value="Upload" align="absmiddle">  
                   
</form>  
 
Ainsi, j'ai une fenêtre de navigation, qui permet au client de sélectionner un fichier dans son disque dur. Ensuite, pour compresser le fichier sélectionné, je dois le lire avec la fonction fopen("chemin_complet_du_fichier", "r" )
Seulement, avec l'adresse du fichier sur le serveur avec $_FILES["uploadfile"]["tmp_name"], j'ai cette erreur :  
Warning: fopen(): Unable to access /var/www/free.fr/e/c/raoul/phpdXh4M4/CRM.doc in /var/www/free.fr/e/c/raoul/projets/compressed.php on line 10
 
Comment faire?
Merci

Reply

Marsh Posté le 28-02-2005 à 19:31:48   

Reply

Marsh Posté le 01-03-2005 à 22:21:05    

T'es sur que le fichier est bien uploader dans ce dossier là? Ca me parait improbable.

Reply

Marsh Posté le 03-03-2005 à 19:08:16    

oui, enfin presque. Dans le formulaire, j'ai bien action="compressed.php" et non upload.php
 
Dans tous les cas, je n'arrive pas à me débarrasser de cette erreur.
Merci
 
 

Reply

Marsh Posté le 03-03-2005 à 19:34:01    

En quoi, le probléme est il différent?
Si le script ne cherche pas le fichier là où il se trouve, il ne risque pas de le trouver.

Reply

Marsh Posté le 03-03-2005 à 20:24:36    

quand tu fais 'echo $_FILES["uploadfile"]["tmp_name"]', ca te sort  /var/www/free.fr/e/c/raoul/phpdXh4M4/ ?
 
sinon, dans le php.ini tu peux configurer la taille maximum du fichier uploadé. Et je ne sais pas quelle valeur a la priorité entre la valeur du php.ini et la valeur dans ton '<input type="hidden" name="MAX_FILE_SIZE" value="4000000"> '.
Donc je suis vraiment pas sur, mais pitetre ton fichier est trop gros par rapport à ce qui est défini dans le php.ini et ca bug ... mais c'est une hypothèse, pas taper pas taper :D

Reply

Marsh Posté le 03-03-2005 à 20:34:10    

Avec la valeur dans le "input", c'est le navigateur qui refusera la validation du formulaire.
Avec la valeur dans le php.ini, le fichier envoyé sera reçu quelle que soit sa taille, mais ensuite, il ne sera pas retransformé en fichier si sa taille dépasse celle indiqué dans le php.ini . Du coup, un fichier trop grand ne sera pas accéssible par un script php, mais son envoie risque de porovoquer un time out du dit script.

Reply

Marsh Posté le 03-03-2005 à 23:38:25    

Excusez-moi, j'ai du mal m'exprimer.  
echo $_FILES["uploadfile"]["tmp_name"] me donne bien : /var/www/free.fr/e/c/raoul/phpdXh4M4  
 
et j'utilise ce formulaire :  
<form enctype="multipart/form-data" action="compressed.php" method="post">
     
<input type="hidden" name="MAX_FILE_SIZE" value="4000000">
<input name="compressfile" type="file" size="50">
<input type="submit" value="Compress" align="absmiddle">
</form>

Reply

Marsh Posté le 03-03-2005 à 23:59:47    

ton script qui utilise fopen() pour ouvrir le fichier, est-ce bien le script "compressed.php" ? car le fichier uploadé ne persiste dans le répertoire temporaire que le temps du script. Si tu veux l'utiliser sur un autre script il faut le sauvegarder, avec par exemple "move_uploaded_file"

Reply

Marsh Posté le 05-03-2005 à 12:29:31    

fopen() fait bien parti de mon script "compressed.php"
Mais tu m'as donné une bonne idée : utiliser "move_uploaded_file" afin de déplacer le fichier d'un répertoire temporaire sur un autre répertoire, et là, je ne sais pas trop pourquoi, fopen() s'exécute correctement!
Merci
 
En revanche, j'ai une nouvelle erreur, la célèbre erreur : "Warning: Cannot modify header information - headers already sent by... " parce que je dois faire appel à la librairie zip :
"require_once('func/zip.lib.php');"
et ensuite l'erreur apparait ici :  
  // entêtes HTTP
  header('Content-Type: application/x-zip');
  // force le téléchargement
  header('Content-Disposition: inline; filename=archive.zip');"
 
Comment je pourrais esquiver ces headers?
Merci

Reply

Marsh Posté le 05-03-2005 à 12:44:51    

j'ai trouvé, c'est plus simple que je le pensais :  
il y avait des espaces et lignes vides après le code php de 'zip.lib.php'

Reply

Marsh Posté le 05-03-2005 à 12:44:51   

Reply

Marsh Posté le 17-03-2005 à 08:17:38    

Salut,
 
je suis très interessé par ton fichier compressed.php, est ce que ca ne te dérange pas de le publier ?
 
merci


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 17-03-2005 à 08:59:25    

En fait j'ai reussi,  
 
J'utilise ce code
 

Code :
  1. // Compression de ce fichier
  2. // appel de la classe
  3.   require_once('zip.lib.php');
  4. // nom du fichier à ajouter dans l'archive
  5.   $filename = $image1;
  6.    
  7.     // contenu du fichier
  8.     $fp = fopen ($filename, 'r');
  9.     $content = fread($fp, filesize($filename));
  10.     fclose ($fp);
  11.    
  12.     // création d'un objet 'zipfile'
  13.     $zip = new zipfile();
  14.     // ajout du fichier dans cet objet
  15.     $zip->addfile($content, $filename);
  16.     // production de l'archive' Zip
  17.     $archive = $zip->file();
  18.    
  19.     // entêtes HTTP
  20.     header('Content-Type: application/x-zip');
  21.     // force le téléchargement
  22.     header('Content-Disposition: inline; filename=archive.zip');
  23.    
  24.     // envoi du fichier au navigateur
  25.     echo $archive;


 
Mais je voudrais laisser le fichier zip, et ne pas le faire télécharger.
 
merci


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed