Создание и извлечение файлов из zip-архивов

Есть ли библиотека для распаковки / распаковки zip-файлов в php?

Класс ZipArchive работает хаотично, и это упоминается на php.net: (для каждой проверенной мной функции)

ZipArchive :: addEmptyDir (информация о версии отсутствует, может быть только в CVS)

Solutions Collecting From Web of "Создание и извлечение файлов из zip-архивов"

Проверьте PEAR Archive_Zip, это может помочь вам http://pear.php.net/package/Archive_Zip/docs/latest/Archive_Zip/Archive_Zip.html

PHP имеет встроенную поддержку Zip через GZip (может не включаться по умолчанию):
http://php.net/zlib

Вы также можете использовать этот класс (Drupal не входит в эту реализацию):
http://drupal.org/node/83253

Тот же модуль, который включает ZipArchive, также включает в себя ряд функций, которые обеспечивают процедурный доступ к zip-файлам. Эта функциональность доступна в PHP 4 (начиная с версии 4.0.7) и PHP 5 (начиная с 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); 

Хорошо, я проверил http://pear.php.net/package/Archive_Zip как опубликовано Irmantas,
но он говорит это:
«Этот пакет больше не поддерживается и был заменен. Пакет переместился на канал pecl.php.net, пакет zip». Затем я искал pear.php.net и наткнулся на: http://pear.php.net/package/File_Archive

Однако File_Archive не имеет очень интуитивного набора методов. Но мне нужна простая функциональность создания tar-файла и извлечение файлов из tar-файла.

Следующие фрагменты достигают этого: Извлечение файлов из файла 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) ); ?> 

Добавление файлов в файл 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() ) ); ?> 

Вы можете вызывать PHP из сборников .NET. Если вы не возражаете, тогда вы можете использовать DotNetZip – он надежный и абсолютно невариантный.

DotNetZip на CodePlex

Образец кода:

 <?php try { $fname = "zip-generated-from-php-" . date('Ymd-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>'; } ?>