Я создаю систему для людей, чтобы загружать файлы .tar (и .tar.gz, .tar.bz2, .zip и т. Д.) В PHP. Загрузка файлов в порядке, но я хотел бы перечислить файлы, содержащиеся в архиве, после его загрузки.
Может кто-то порекомендовать хорошую библиотеку PHP, которая может читать архивы файлов?
Я нашел File_Archive on Pear, но не обновлялся через несколько лет. ZipArchive отлично подходит для файлов .zip, но мне нужно что-то, что может обрабатывать больше типов файлов.
Обновление Я запускаю RHEL6, PHP 5.2 и Apache 2.2.
Вы можете сделать это с PharData
класса PharData
:
// Example: list files $archive = new PharData('/some/file.tar.gz'); foreach($archive as $file) { echo "$file\n"; }
Это даже работает с phar://
stream wrapper:
$list = scandir('phar:///some/file.tar.gz'); $fd = fopen('phar:///some/file.tar.gz/some/file/in/the/archive', 'r'); $contents = file_get_contents('phar:///some/file.tar.gz/some/file/in/the/archive');
Если у вас нет Phar, проверьте реализацию PHP-only или расширение pecl .
Нижеприведенный код читает файл внутри zip-файла .gz
<?php $z = gzopen('zipfile.gz','r') or die("can't open: $php_errormsg"); $string = ''; while ($line = gzgets($z,1024)) { $string .= $line; } echo $string; gzclose($z) or die("can't close: $php_errormsg"); ?>
Обратите внимание, что для работы этого кода необходимо иметь расширение zip для php.
Не пытайтесь строить это самостоятельно. Используйте существующий класс, например http://pear.php.net/package/Archive_Tar, чтобы обработать это для вас.
Использовать расширение zlib
Я не думаю, что первый ответ будет работать. Или это не работает для меня. Вы не могли прочитать содержимое файла, когда вы его заходите. Я приводил свой рабочий код ниже.
$fh = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('phar:///dir/file.tar.gz'), RecursiveIteratorIterator::CHILD_FIRST); foreach ($fh as $splFileInfo){ echo file_get_contents($splFileInfo->getPathname());
Это работает для файлов gz, zip, tar и bz.