Как я могу прочитать файл .tar.gz с PHP?

Я создаю систему для людей, чтобы загружать файлы .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.