PHP 8.4.1 Released!

PharData::extractTo

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)

PharData::extractToExtrait le contenu d'une archive tar/zip vers un répertoire

Description

public PharData::extractTo(string $directory, array|string|null $files = null, bool $overwrite = false): bool

Extrait tous les fichiers d'une archive tar/zip vers le disque. Les fichiers et les répertoires extraits conservent les permissions telles qu'au sein de l'archive. Les paramètres optionnels permettent un éventuel contrôle sur quels fichiers seront extraits et si les fichiers déjà présents sur le disque peuvent être écrasés. Le second paramètre files peut être le nom d'un fichier ou d'un répertoire à extraire, ou tableau de nom de fichiers et de répertoires à extraire. Par défaut, cette méthode n'écrasera aucun fichier déjà existant, à moins que le troisième paramètre soit à true. Cette méthode est identique à ZipArchive::extractTo().

Liste de paramètres

directory

Chemin où les fichiers seront extraits.

files

Le nom d'un fichier ou d'un répertoire à extraire, ou un tableau de fichiers/répertoires à extraire

overwrite

Le passer à true pour activer l'écrasement des fichiers déjà existants

Valeurs de retour

Retourne true en cas de succès, mais il est préférable de vérifier les exception soulevées et de considérer le succès si aucune ne l'est.

Erreurs / Exceptions

Soulève une exception PharException si des erreurs sont rencontrés lors de l'écriture des changements sur le disque.

Exemples

Exemple #1 Exemple avec PharData::extractTo()

<?php
try {
$phar = new PharData('monphar.tar');
$phar->extractTo('/chemin/complet'); // extrait tous les fichiers
$phar->extractTo('/un/autre/chemin', 'fichier.txt'); // extrait seulement fichier.txt
$phar->extractTo('/ce/chemin',
array(
'fichier1.txt', 'fichier2.txt')); // extrait seulement 2 fichiers
$phar->extractTo('/troisieme/chemin', null, true); // extrait tous les fichiers, en écrasant
} catch (Exception $e) {
// on traite les erreurs
}
?>

Notes

Note:

Les systèmes de fichiers NTFS Windows ne supportent pas certain caractères dans le noms de fichier, à savoir <|>*?":. Les noms de fichiers avec un point trainant ne sont également pas supporté. Contrairement à certains outils d'extraction, cette méthode ne remplace pas ces caractères avec un tiret bas, mais échoue à extraire de tel fichiers.

Voir aussi

add a note

User Contributed Notes 3 notes

up
1
njh at aelius dot com
11 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
7 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
1
Daniel
6 months 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>';
?>
To Top