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


Я создаю систему для загрузки людьми .tar (и.tar.gz, .tar.bz2, .zip и т.д.) файлы на PHP. Загрузка файлов - это нормально, но я хотел бы перечислить файлы, содержащиеся в архиве, после того, как он был загружен.

Может ли кто-нибудь порекомендовать хорошую библиотеку PHP, которая может читать файловые архивы?

Я нашел Файловый архив на Pear, но он не обновлялся в течение нескольких лет. ZipArchive отлично подходит для файлов .zip, но мне нужно что-то, что может обрабатывать больше файлов типы.

Обновление Я работаю на RHEL6, PHP 5.2 и Apache 2.2.

 11
Author: Michael, 2011-02-02

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.

 25
Author: arnaud576875, 2013-02-04 17:25:10

Приведенный ниже код считывает файл внутри .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.

 4
Author: shasi kanth, 2013-01-09 03:49:55

Не пытайтесь построить это самостоятельно. Используйте существующий класс, например http://pear.php.net/package/Archive_Tar чтобы справиться с этим за тебя.

 3
Author: mario, 2011-02-02 19:23:09

Используйте расширение zlib

 2
Author: Mark Baker, 2011-02-02 19:18:09

Я не думаю, что первый ответ работает. Или это не работает только для меня. Вы не смогли прочитать содержимое файла при его предварительном просмотре. Ниже я привожу свой рабочий код.

$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.

 2
Author: Jerry, 2018-05-09 13:00:31