PharData::extractTo

(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

Descripción

public function PharData::extractTo(string $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 controlar 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 similar a ZipArchive::extractTo().

Advertencia

La extracción sigue los enlaces simbólicos existentes en el directory de destino. Si hay un enlace simbólico en el directory de destino:

  • si el enlace simbólico apunta a otro directorio, los ficheros pueden extraerse fuera de la ubicación deseada.
  • si el enlace simbólico apunta a un fichero que no existe, este será creado.
  • si el enlace simbólico apunta a un fichero que existe, el destino será sobrescrito cuando overwrite sea true.

Parámetros

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

Valores devueltos

Devuelve true en caso de éxito, pero es preferible verificar las excepciones lanzadas y considerar el éxito si ninguna se produce.

Errores/Excepciones

Lanza una excepción PharException si se encuentran errores al escribir los cambios en el disco.

Ejemplos

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
}
?>

Notas

Nota:

Los sistemas de archivos NTFS de Windows no soportan ciertos caracteres en los nombres de fichero, como <|>*?":. Los nombres de fichero 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 ficheros.

Véase también

+add a note

User Contributed Notes 3 notes

up
1
njh at aelius dot com
13 years ago
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
up
1
Anonymous
9 years ago
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?
up
0
Daniel
2 years ago
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>';
?>