Как я могу читать a.tar.gz файл с PHP?
Я создаю систему для загрузки людьми .tar (и.tar.gz, .tar.bz2, .zip и т.д.) файлы на PHP. Загрузка файлов - это нормально, но я хотел бы перечислить файлы, содержащиеся в архиве, после того, как он был загружен.
Может ли кто-нибудь порекомендовать хорошую библиотеку PHP, которая может читать файловые архивы?
Я нашел Файловый архив на Pear, но он не обновлялся в течение нескольких лет. ZipArchive отлично подходит для файлов .zip, но мне нужно что-то, что может обрабатывать больше файлов типы.
Обновление Я работаю на RHEL6, PHP 5.2 и Apache 2.2.
5 answers
Вы можете сделать это с помощью PharData
класс:
// Example: list files
$archive = new PharData('/some/file.tar.gz');
foreach($archive as $file) {
echo "$file\n";
}
Это даже работает с оболочкой потока phar://
:
$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 или расширение pecl.
Приведенный ниже код считывает файл внутри .gz zip-файла
<?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");
?>
Обратите внимание, что для работы этого кода вам необходимо включить расширение php zip.
Не пытайтесь построить это самостоятельно. Используйте существующий класс, например 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.