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 — Comprime el archivo tar/zip completo utilizando la compresión Gzip o Bzip2
Para los archivos tar, este método comprime el archivo completo utilizando la compresión gzip o bzip2. El archivo resultante puede ser manipulado con el comando gunzip/bunzip, o ser accedido directamente y de forma transparente con la extensión Phar.
Para los archivos zip, este método falla al lanzar una excepción. La extensión zlib debe estar activada para comprimir con gzip, la extensión bzip2 debe estar activada para comprimir con bzip2.
Asimismo, este método renombra automáticamente el archivo, añadiendo el sufijo .gz
,
.bz2
o eliminando la extensión si Phar::NONE
es especificado para eliminar
la compresión. De lo contrario, una extensión de archivo puede ser especificada con el segundo argumento.
compression
La compresión debe ser Phar::GZ
o
Phar::BZ2
para aplicar una compresión, o Phar::NONE
para eliminarla.
extension
Por omisión, la extensión es .tar.gz
o .tar.bz2
para comprimir un tar, y .tar
para descomprimir.
Levanta una excepción BadMethodCallException si la extensión zlib no está disponible, o si la extensión bzip2 no está activada.
Versión | Descripción |
---|---|
8.0.0 |
extension ahora es nullable.
|
Ejemplo #1 Un ejemplo con PharData::compress()
<?php
$p = new PharData('/ruta/al/mio.tar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
$p1 = $p->compress(Phar::GZ); // copies hacia /path/to/my.tar.gz
$p2 = $p->compress(Phar::BZ2); // copies hacia /path/to/my.tar.bz2
$p3 = $p2->compress(Phar::NONE); // excepción: /path/to/my.tar ya existe
?>
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"