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 — Extrai o conteúdo de um arquivo tar/zip para um diretório
$directory
, array|string|null $files
= null
, bool $overwrite
= false
): bool
Extrai todos os arquivos de um arquivo tar/zip para o disco. Os arquivos e diretórios extraídos preservam
as permissões conforme armazenadas no arquivo. Os parâmetros opcionais permitem controle opcional sobre
quais arquivos são extraídos e se os arquivos existentes no disco podem ser sobrescritos.
O segundo parâmetro files
pode ser o nome de um arquivo ou
diretório a ser extraído, ou um array de nomes de arquivos e diretórios a serem extraídos. Por
padrão, este método não sobrescreve arquivos existentes; o terceiro parâmetro pode ser
definido como true para habilitar a sobrescrita de arquivos.
Este método é semelhante a ZipArchive::extractTo().
directory
Caminho para o qual devem ser extraídos os arquivos informados em files
.
files
O nome de um arquivo ou diretório a ser extraído, ou um array de arquivos/diretórios a serem extraídos.
overwrite
Defina como true
para habilitar a substituição de arquivos existentes.
Retorna true
em caso de sucesso, mas é melhor verificar se há exceções lançadas
e assumir sucesso se nenhuma for lançada.
Lança PharException se ocorrerem erros durante a descarga de alterações no disco.
Exemplo #1 Um exemplo de PharData::extractTo()
<?php
try {
$phar = new PharData('meuphar.tar');
$phar->extractTo('/caminho/completo'); // extrai todos os arquivos
$phar->extractTo('/caminho/alternativo', 'arquivo.txt'); // extrai somente arquivo.txt
$phar->extractTo('/este/caminho',
array('arquivo1.txt', 'arquivo2.txt')); // extrai somente 2 arquivos
$phar->extractTo('/terceiro/caminho', null, true); // extrai todos os arquivos e sobrescreve
} catch (Exception $e) {
// lida com erros
}
?>
Nota:
O sistema de arquivos NTFS do Windows não suporta alguns caracteres em nomes de arquivos, como
<|>*?":
. Nomes de arquivos que terminam com ponto também não são suportados. Ao contrário de algumas ferramentas de extração, este método não substitui estes caracteres por um sublinhado, mas falha ao extrair esses arquivos.
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>';
?>