ConFoo 2025

PharData::decompress

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

PharData::decompressDécompresse l'archive Phar entière

Description

public PharData::decompress(?string $extension = null): ?PharData

Décompresse l'archive entière, si c'est une archive tar.

Pour les archives Zip, cette méthode échoue et lève une exception. L'extension zlib doit être activée pour décompresser une archive compressée avec gzip et l'extension bzip2 doit être disponible pour décompresser une archive compressée avec bzip2.

De plus, cette méthode renomme automatiquement l'extension de fichier de l'archive, .tar par défaut. Sinon, une extension de fichier peut être spécifiée avec le paramètre extension.

Liste de paramètres

extension

Pour décompresser, l'extension par défaut est .tar. Utilisez ce paramètre pour spécifier une autre extension de fichier. Gardez à l'esprit que seul les archives exécutables peuvent contenir .phar dans leur nom de fichier.

Valeurs de retour

Un objet PharData est retourné en cas de succès, ou null en cas d'échec.

Erreurs / Exceptions

Soulève une exception BadMethodCallException si l'extension zlib n'est pas disponible ou si l'extension bzip2 n'est pas activée.

Historique

Version Description
8.0.0 extension est désormais nullable.

Exemples

Exemple #1 Exemple avec PharData::decompress()

<?php
$p
= new PharData('/path/to/my.tar.gz');
$p->decompress(); // crée /path/to/my.tar
?>

Voir aussi

add a note

User Contributed Notes 1 note

up
6
pttlens at gmail dot com
6 years ago
If filename contains multiple dots(.), you can preserve other parts by following code (example1).

Example #1 (Expected)
<?php
$filename
= "abc.xyz.tar.gz";
$p = new PharData($filename);
$exts = explode('.', $filename);
array_shift($exts);
array_pop($exts);
$ext = implode('.', $exts);
$p->decompress($ext); # result filename: abc.xyz.tar
?>

Example #2 (might be unexpected)
<?php
$filename
= "abc.xyz.tar.gz";
$p = new PharData($filename);
$p->decompress($filename); # result filename: abc.tar; xyz is truncated accidentally.
?>
To Top