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));(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
PharData::compress â Compresse l'archive tar/zip complĂšte en utilisant la compression Gzip ou Bzip2
Pour les archives tar, cette mĂ©thode compresse l'archive entiĂšre en utilisant la compression 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.
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.
SoulÚve une exception BadMethodCallException si l'extension zlib n'est pas disponible, ou si l'extension bzip2 n'est pas activée.
| Version | Description |
|---|---|
| 8.0.0 |
extension est désormais nullable.
|
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); // copie vers /chemin/vers/mon.tar.gz
$p2 = $p->compress(Phar::BZ2); // copie vers /chemin/vers/mon.tar.bz2
$p3 = $p2->compress(Phar::NONE); // exception : /chemin/vers/mon.tar existe dĂ©jĂ
?>
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));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"