Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks
Bibliothèques et frameworks Forum d'entraide sur les frameworks, templates, bibliothèques de code (PDFLib, eZPdf, JpGraph, Artichow, PEAR, etc). Avant de poster : FAQ bibliothèques, toutes les FAQ PHP et cours bibliothèques
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2007, 14h45   #1
Membre expérimenté
 
Avatar de menuge
 
Inscription : avril 2004
Messages : 727
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : avril 2004
Messages : 727
Points : 575
Points : 575
Envoyer un message via MSN à menuge Envoyer un message via Skype™ à menuge
Par défaut [Zip] probleme de fermeture de ZIP

Salut à tous,

je souhaite créer un fichier zip, voici mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
$zip = new ZipArchive();
$filename = "test112.zip";
 
if ($zip->open($filename, ZIPARCHIVE::CREATE)!=TRUE) {
    exit("cannot open <$filename>\n");
}
 
$zip->addFromString("testfilephp.txt" . time(), "#1 Ceci est un test, ajouté en tant que fichier testfilephp.txt.\n");
$zip->addFromString("testfilephp2.txt" . time(), "#2 Ceci est un test, ajouté en tant que fichier testfilephp2.txt.\n");
 
print_r($zip);
 
$zip->close()or die("Erreur lors de la fermeture de l'archive");
?>
Le truc, c'est qu'il me renvoie une erreur lorsque je fais le close().

Citation:
ZipArchive Object ( [status] => 0 [statusSys] => 0 [numFiles] => 2 [filename] => [comment] => )
Erreur lors de la fermeture de l'archive
Une chose qui me surprend, c'est que le filename n'est pas setter!!!

Quelqu'un peut m'aider???

Merci d'avance
__________________
--
Ludovic
menuge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 14h55   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Le problème peut être plus en amont, notamment au niveau de la méthode open où une égalité/différence en type et en valeur est nécessaire du fait qu'elle renvoie une valeur numérique décrivant l'erreur qui s'est produite (s'il y en a une - je rappelle qu'est considérée comme vraie toute valeur numérique différente de 0).
Code :
if ($zip->open($filename, ZIPARCHIVE::CREATE) !== TRUE) {
Voir la documentation pour plus de détails.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 14h58   #3
Membre expérimenté
 
Avatar de menuge
 
Inscription : avril 2004
Messages : 727
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : avril 2004
Messages : 727
Points : 575
Points : 575
Envoyer un message via MSN à menuge Envoyer un message via Skype™ à menuge
En fait, c'est une erreur sur mon post, mais sur mon code, c'est bien:
Code :
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE)
__________________
--
Ludovic
menuge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 15h01   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Apache possède les droits nécessaires pour écrire l'archive à l'endroit spécifié (le répertoire courant d'après votre code) ?

Vous avez quelle version de cette extension (cf phpinfo) ?


Edit: je viens de tester sur une version 5.2.2 et ce code fonctionne mais l'"attribut" filename n'apparaît pas non plus.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 15h18   #5
Membre expérimenté
 
Avatar de menuge
 
Inscription : avril 2004
Messages : 727
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : avril 2004
Messages : 727
Points : 575
Points : 575
Envoyer un message via MSN à menuge Envoyer un message via Skype™ à menuge
C'est un problème de droits!!!

Merci beaucoup!!

J'ai une autre question, comment faire un ZIP sans créer sur le disque un fichier:
je m'explique, je souhaite que l'utilisateur aille sur ma page PHP et qu'une page "Save as" apparaisse afin qu'il enregistre son ZIP:

J'ai déjà mis les hearders:
Code :
1
2
3
header('Pragma: public');
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename=toto.zip');
mais je ne sais pas comme créer le reste du zip.

Merci
__________________
--
Ludovic
menuge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 15h34   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Vous n'aurez pas accès à l'archive elle-même tant que vous n'aurez pas appeler la méthode close qui l'écrit sur le disque (c'est possible pour un fichier archivé en revanche). Ne pouvez-vous pas le supprimer à la fin du script via la fonction unlink et/ou avec une tâche planifiée/cron ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 16h18   #7
Membre expérimenté
 
Avatar de menuge
 
Inscription : avril 2004
Messages : 727
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : avril 2004
Messages : 727
Points : 575
Points : 575
Envoyer un message via MSN à menuge Envoyer un message via Skype™ à menuge
En fait, je pensais que je pouvais faire comme ce script:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
  require_once('zip.lib.php');
  $zipfilename = 'zip_archive_to_generate.zip';
  $zip_subfolder = 'subfolder_in_zip_archive';
 
  $settings = '
    <?php
      $setting1 = "'.$setting1.'";
      $setting2 = "'.$setting2.'";
    ?>
  ';
 
  $ad_dir = 'folder_holding_files_to_add_to_zip';
 
  // form is posted, handle it   
  $zipfile = new zipfile();
 
  // generate _settings into zip file
  $zipfile ->addFile( stripcslashes( $settings ), $zip_subfolder . '/_settings.php' );
 
  if ($handle = opendir($ad_dir)) {
     while (false !== ($file = readdir($handle))) {
        if (!is_dir($file) && $file != "." && $file != ".." ) {
          $f_tmp = @fopen( $ad_dir . '/' . $file, 'r');
 
          if($f_tmp){
            $dump_buffer=fread( $f_tmp, filesize($ad_dir . '/' . $file));
            $zipfile -> addFile($dump_buffer, $zip_subfolder . '/' . $file);
            fclose( $f_tmp );
          }
        }
     }  
 
  $dump_buffer = $zipfile -> file();
  // write the file to disk:
  /*
  $file_pointer = fopen('newzip.zip', 'w');
  if($file_pointer){
    fwrite( $file_pointer, $dump_buffer, strlen($dump_buffer) );
    fclose( $file_pointer );
  }
  */
 
  // response zip archive to browser:
  header('Pragma: public');
  header('Content-type: application/zip');
  header('Content-length: ' . strlen($dump_buffer));
  header('Content-Disposition: attachment; filename="'.$zipfilename.'"');
 
  exit;
?>
Lien vers le script

mais en utilisant le même principe que précedemment.
__________________
--
Ludovic
menuge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 17h35   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il faut comparer ce qui est comparable : l'extension Zip offre bien plus de fonctionnalités que la classe fournie avec phpMyAdmin. L'extension Zip n'offre pas de moyen de gérer l'archive comme un flux et je pense que ceci est dû au fonctionnement de l'extension car elle attend l'appel à sa méthode close (normalement appelée automatiquement si vous ne le faites pas) pour synchroniser les modifications avec le fichier de sortie (je rappelle par ailleurs que vous pouvez annuler des modifications) : c'est plus cohérent (et facile à gérer). Ceci a été prévu pour les fichiers qu'elle contient (via sa méthode getStream ou le wrapper zip) mais pas pour l'archive elle-même.

Vous pouvez tout à fait utiliser cette classe de phpMyAdmin, qui sera bien plus portable. Tout dépend de l'étendue de vos besoins.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 12h32   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

J'ai le même souci sur ma machine. Pour y remédier, j'ai dupliqué l'attribut filename dans une variable file_name (il me semble que fileName fonctionne aussi) que je remplis moi-même depuis le constructeur de ma classe.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h01.


 
 
 
 
Partenaires

Hébergement Web