IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Zip] probleme de fermeture de ZIP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut [Zip] probleme de fermeture de ZIP
    Salut à tous,

    je souhaite créer un fichier zip, voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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().

    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

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($zip->open($filename, ZIPARCHIVE::CREATE) !== TRUE) {
    Voir la documentation pour plus de détails.

  3. #3
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    En fait, c'est une erreur sur mon post, mais sur mon code, c'est bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE)
    --
    Ludovic

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    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.

  5. #5
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    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 ?

  7. #7
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    En fait, je pensais que je pouvais faire comme ce script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    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.

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    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.

Discussions similaires

  1. [Archive::Zip] - probleme avec extractToFileHandle
    Par syneau dans le forum Modules
    Réponses: 4
    Dernier message: 10/02/2011, 16h26
  2. probleme avec java.util.zip
    Par tarekphp dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 13/05/2009, 18h36
  3. Probleme de Sauvegarde en *.ZIP
    Par david77320 dans le forum WinDev
    Réponses: 28
    Dernier message: 30/01/2008, 16h50
  4. [TP] Problème de fermeture Turbo Pascal
    Par Aezar dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 22/05/2005, 10h24
  5. [Linux] Probleme de fermeture de Sockets
    Par diefo dans le forum Réseau
    Réponses: 6
    Dernier message: 30/12/2003, 13h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo