Note that PHAR only supports extracting the 'ustar' variant of the tar archives.
Some systems (such as older versions of Mac OS X) generate the 'pax' format by default.
See here for more information:
http://php.net/manual/pl/phar.fileformat.tar.php
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
PharData::extractTo — Извлечь содержимое tar/zip-архива в директорию
$directory
, array|string|null $files
= null
, bool $overwrite
= false
): bool
Извлекает все файлы tar/zip-архива на диск. Извлечённые файлы и директории сохраняют
все разрешения, которые у них были. Опциональные параметры позволяют контролировать,
какие именно файлы извлекать и нужно ли перезаписывать уже существующие.
Второй параметр files
может быть как именем файла, так и
путём директории, которые надо извлекать. По умолчанию уже существующие на диске
файлы перезаписываться не будут. Для указания, что нужно использовать перезапись,
используется третий параметр.
Этот метод аналогичен методу ZipArchive::extractTo().
directory
Путь, по которому необходимо сохраните извлечённые файлы (files
)
files
Имя файла или директории, которые надо извлечь. Либо архив с именами файлов/директорий
overwrite
Установите в true
, если необходимо перезаписывать уже существующие файлы
Возвращает true
в случае успешного выполнения. Но лучше использовать механизм перехвата исключений для контроля успешности.
Выбрасывает исключение PharException в случае возникновения ошибки записи на диск.
Пример #1 Пример использования PharData::extractTo()
<?php
try {
$phar = new PharData('myphar.tar');
$phar->extractTo('/full/path'); // извлечь все файлы
$phar->extractTo('/another/path', 'file.txt'); // извлечь только file.txt
$phar->extractTo('/this/path',
array('file1.txt', 'file2.txt')); // извлечь два указанных файла
$phar->extractTo('/third/path', null, true); // извлечь все файлы, использовать перезапись
} catch (Exception $e) {
// обработка ошибок
}
?>
Замечание:
Файловые системы Windows NTFS не поддерживают некоторые символы в именах файлов —
<|>*?":
. Имена файлов с точкой в конце также не поддерживаются. В отличие от ряда инструментов извлечения, метод не поддерживает замену этих символов на подчёркивание, а вместо этого возникает ошибка при извлечении таких файлов.
Note that PHAR only supports extracting the 'ustar' variant of the tar archives.
Some systems (such as older versions of Mac OS X) generate the 'pax' format by default.
See here for more information:
http://php.net/manual/pl/phar.fileformat.tar.php
I'm unable to extract the first directory from a tar archive:
the destination dir remains empty,
no error is thrown
<?php
$tar = new \PharData('archive.tar');
if ($tar->current()->isDir()) {
echo 'is_dir';
$dir = $tar->current()->getPathname();
$dir = basename($dir);
$tar->extractTo('destination', $dir);
}
?>
the docs hint that the second param could be a name of file OR DIR to be extracted from the archive, is that really possible?
This is an example of how to decompress and unarchive a TAR.GZ file using Phar decompress() and extractTo() methods:
<?php
echo '<h1>TAR.GZ decompress</h1>';
$file_name = 'your_file.tar.gz';
$tar_file_name = str_replace('.gz', '', $file_name);
$dir_file_name = str_replace('.tar.gz', '', $file_name);
// decompress from gz and creates your_file.tar
$p = new PharData($file_name);
$p->decompress();
// unarchive from the tar to folder 'your_file'
$phar = new PharData($tar_file_name);
$phar->extractTo($dir_file_name);
echo '<h1>DONE</h1>';
?>