PHP Conference Nagoya 2025

PharData::compress

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

PharData::compressCompresse l'archive tar/zip complète en utilisant la compression Gzip ou Bzip2

Description

public PharData::compress(int $compression, ?string $extension = null): ?PharData

Pour les archives tar, cette méthode compresse l'archive entière en utilisant la compressions gzip ou bzip2. Le fichier qui en résulte peut être manipulé avec la commande gunzip/bunzip, ou être accédé directement et de façon transparente avec l'extension Phar.

Pour les archives zip, cette méthode échoue en levant une exception. L'extension zlib doit être activée pour compresser avec gzip, l'extension bzip2 doit être activée pour compresser avec bzip2.

De plus, cette méthode renomme automatiquement l'archive, en la suffixant par .gz, .bz2 ou en enlevant l'extension si Phar::NONE est spécifié pour enlever la compression. Sinon, une extension de fichier peut être spécifiée avec le second paramètre.

Liste de paramètres

compression

La compression doit être Phar::GZ ou Phar::BZ2 pour appliquer une compression, ou Phar::NONE pour l'enlever.

extension

Par défaut, l'extension est .tar.gz ou .tar.bz2 pour compresser un tar, et .tar pour décompresser.

Valeurs de retour

Un objet PharData est retourné en cas de succès, 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 Un exemple avec PharData::compress()

<?php
$p
= new PharData('/chemin/vers/mon.tar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
$p1 = $p->compress(Phar::GZ); // copies vers /path/to/my.tar.gz
$p2 = $p->compress(Phar::BZ2); // copies vers /path/to/my.tar.bz2
$p3 = $p2->compress(Phar::NONE); // exception : /path/to/my.tar existe déjà
?>

Voir aussi

  • Phar::compress() - Compresse l'archive Phar complète en utilisant la compression Gzip ou Bzip2

add a note

User Contributed Notes 2 notes

up
6
Christopher Marshall
8 years ago
This is a very irritating bug. You can use this to get around it though:

$data = 'some.test.string';
$phar = new PharData('test.tar');

$phar->compress(Phar::GZ, substr($data, strpos($data, '.') + 1));
up
2
c6h1206free at gmail dot com
8 years ago
This method destroys everything after the first dot in your filename and replaces it with the zip extension (.tar.gz, etc)

Example:

<?php

$tarfile
= "2.5.0.0-RC1.tar";
$pd = new \PharData($tarfile);
$pd->buildFromDirectory("/path/to/contents");
$pd->compress(\Phar::GZ);

?>

Ends up with a file named "2.tar.gz"
To Top