Question

Existe-t-il une bibliothèque pour créer / extraire des fichiers zip en php?

La classe ZipArchive fonctionne de manière erratique, et ceci est mentionné sur php.net: (pour chaque fonction que j'ai vérifiée)

ZipArchive :: addEmptyDir (Aucune information de version disponible, peut-être uniquement dans CVS)

Était-ce utile?

La solution 4

Bien, j'ai vérifié http://pear.php.net/package/Archive_Zip . Publié par Irmantas,
mais il dit ceci:
"Ce paquet n'est plus mis à jour et a été remplacé. Le package a été déplacé vers le canal pecl.php.net, le package zip. & Quot; Puis j'ai cherché pear.php.net et suis tombé sur: http://pear.php.net/package/File_Archive

File_Archive ne dispose cependant pas d'un ensemble de méthodes très intuitif. Mais je voulais une fonctionnalité simple de faire un fichier tar, et extraire des fichiers d’un fichier tar.

Les extraits suivants permettent d'atteindre cet objectif: Extraire des fichiers d’un fichier tar - >

<?php
require_once "File/Archive.php";
$tmp = 'output';
$t1 = 'check.tar';
File_Archive::setOption('tmpDirectory','tmp');
$r = File_Archive::extract(
    File_Archive::read($t1.'/'),
    File_Archive::toFiles($tmp)
);
?>

Ajout de fichiers à un fichier tar - >

<?php
require_once "Archive.php";
$dir = "../../mysql/data/blackStone/";
$files[0] = "";
$i = 0;
          if ($dh = opendir($dir)) {
              while (($file = readdir($dh)) !== false ) {
              if( $file != "." && $file != ".." )
                $files[$i++] = $dir.$file;
          }
      }

File_Archive::extract(
    $files,
    File_Archive::toArchive(
        'check.tar',
        File_Archive::toOutput()
    )
);

?>

Autres conseils

PHP a un support Zip natif via GZip (peut ne pas être activé par défaut):
http://php.net/zlib

Vous pouvez également utiliser cette classe (Drupal ne fait pas partie de cette implémentation):
http://drupal.org/node/83253

Le même module, qui inclut ZipArchive , comprend également un certain nombre de fonctions qui permettent un accès procédural aux fichiers zip. Cette fonctionnalité est disponible en PHP 4 (depuis la version 4.0.7) et en PHP 5 (depuis la version 5.2.0).

$zip = zip_open("foo.zip");
$files = [];

while ($entry = zip_read($zip)) {
    zip_entry_open($zip, $entry);
    $files[zip_entry_name($entry)] = zip_entry_read($entry, zip_entry_filesize($entry));
    zip_entry_close($entry);
}

zip_close($zip);

Vous pouvez appeler depuis PHP dans des assemblys .NET. Si cela ne vous dérange pas, vous pouvez utiliser DotNetZip - il est fiable et totalement non erratique.

DotNetZip sur CodePlex

Exemple de code:

<?php
try
{
  $fname = "zip-generated-from-php-" . date('Y-m-d-His') . ".zip";
  $zipOutput = "c:\\temp\\" . $fname;
  # Use COM interop to get to Ionic Zip. (Windows only)
  $zip = new COM("Ionic.Zip.ZipFile");
  $zip->Name = $zipOutput;
  $dirToZip= "c:\\temp\\psh";
  # Encryption:  3=AES256, 2=AES128, 1=PKZIP, 0=None.
  $zip->Encryption = 3;
  $zip->Password = "AES-Encryption-Is-Secure";
  $zip->AddDirectory($dirToZip);
  $zip->Save();
  $zip->Dispose();

  if (file_exists($zipOutput))
  {
    header('Cache-Control: no-cache, must-revalidate');
    header('Content-Type: application/x-zip'); 
    header('Content-Disposition: attachment; filename=' . $fname);
    header('Content-Length: ' . filesize($zipOutput));
    readfile($zipOutput);
    unlink($zipOutput);
  }
  else 
  {
    echo '<html>';
    echo '  <head>';
    echo '  <title>Calling DotNetZip from PHP through COM</title>';
    echo '  <link rel="stylesheet" href="basic.css"/>';
    echo '  </head>';
    echo '<body>';
    echo '<h2>Whoops!</h2>' . "<br/>\n";
    echo '<p>The file was not successfully generated.</p>';
    echo '</body>';
    echo '</html>';
  } 
}
catch (Exception $e) 
{
    echo '<html>';
    echo '  <head>';
    echo '  <title>Calling DotNetZip from PHP through COM</title>';
    echo '  <link rel="stylesheet" href="basic.css"/>';
    echo '  </head>';
    echo '<body>';
    echo '<h2>Whoops!</h2>' . "<br/>\n";
    echo '<p>The file was not successfully generated.</p>';
    echo '<p>Caught exception: ',  $e->getMessage(), '</p>', "\n";
    echo '<pre>';
    echo $e->getTraceAsString(), "\n";
    echo '</pre>';
    echo '</body>';
    echo '</html>';
}

?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top