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 — Extrae el contenido de un archivo tar/zip hacia un directorio
$directory
, array|string|null $files
= null
, bool $overwrite
= false
): bool
Extrae todos los ficheros de un archivo tar/zip hacia el disco.
Los ficheros y directorios extraídos conservan los permisos
tal como en el archivo. Los parámetros opcionales permiten un
eventual control sobre qué ficheros serán extraídos y si los ficheros
ya existentes en el disco pueden ser sobrescritos. El segundo parámetro
files
puede ser el nombre de un fichero o directorio
a extraer, o un array de nombres de ficheros y directorios a extraer.
Por omisión, este método no sobrescribirá ningún fichero ya existente, a menos
que el tercer parámetro sea true
. Este método es idéntico a
ZipArchive::extractTo().
directory
Ruta donde los ficheros serán extraídos.
files
El nombre de un fichero o directorio a extraer, o un array de ficheros/directorios a extraer
overwrite
Pasarlo a true
para activar la sobrescritura de ficheros ya
existentes
Devuelve true
en caso de éxito, pero es preferible verificar las
excepciones lanzadas y considerar el éxito si ninguna se produce.
Lanza una excepción PharException si se encuentran errores al escribir los cambios en el disco.
Ejemplo #1 Ejemplo con PharData::extractTo()
<?php
try {
$phar = new PharData('monphar.tar');
$phar->extractTo('/ruta/completa'); // extrae todos los ficheros
$phar->extractTo('/otra/ruta', 'fichero.txt'); // extrae solo fichero.txt
$phar->extractTo('/esta/ruta',
array('fichero1.txt', 'fichero2.txt')); // extrae solo 2 ficheros
$phar->extractTo('/tercera/ruta', null, true); // extrae todos los ficheros, sobrescribiendo
} catch (Exception $e) {
// se manejan los errores
}
?>
Nota:
Los sistemas de archivos NTFS de Windows no soportan ciertos caracteres en los nombres de archivo, a saber
<|>*?":
. Los nombres de archivo con un punto final no son soportados. A diferencia de algunas herramientas de extracción, este método no reemplaza estos caracteres con un guión bajo, sino que falla al extraer tales archivos.
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>';
?>