PHP Untar-GZ без exec ()? - PullRequest
       32

PHP Untar-GZ без exec ()?

26 голосов
/ 23 февраля 2012

Как мне распаковать файл в php без использования exec('tar') или каких-либо других команд, использующих чистый PHP?

Моя проблема заключается в следующем; У меня есть файл tar.gz размером 26 МБ, который нужно загрузить на мой сервер и извлечь. Я попытался использовать net2ftp для его извлечения, но он не поддерживает распаковку tar.gz после загрузки.

Я использую бесплатный веб-хостинг, поэтому они не допускают никаких команд exec() и не разрешают доступ к приглашению. Итак, как бы мне это не заметить?

Есть ли в PHP встроенная команда?

Ответы [ 2 ]

45 голосов
/ 07 сентября 2012

Начиная с PHP 5.3.0 вам не нужно использовать Archive_Tar.

Существует новый класс для работы с архивом tar: Класс PharData .

Чтобы извлечь архив (используя PharData::extractTo(), который работает как ZipArchive::extractTo()):

try {
    $phar = new PharData('myphar.tar');
    $phar->extractTo('/full/path'); // extract all files
} catch (Exception $e) {
    // handle errors
}

А если у вас есть архив tar.gz, просто распакуйте его перед извлечением (используяPharData::decompress()):

// decompress from gz
$p = new PharData('/path/to/my.tar.gz');
$p->decompress(); // creates /path/to/my.tar

// unarchive from the tar
$phar = new PharData('/path/to/my.tar');
$phar->extractTo('/full/path');
3 голосов
/ 23 февраля 2012

PEAR предоставляет класс Archive_Tar , который поддерживает сжатия как Gzip, так и BZ2, при условии, что у вас загружены расширения zlib и bz2 соответственно.

...