PHP 8.5.0 Alpha 1 available for testing

Phar::compressFiles

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

Phar::compressFilesComprime todos los ficheros del archivo Phar actual

Descripción

public Phar::compressFiles(int $compression): void

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Para los archivos phar basados en tar, este método lanza una excepción BadMethodCallException ya que la compresión de ficheros individuales dentro de un archivo tar no es soportada por el formato de archivo. Utilice Phar::compress() para comprimir un archivo phar basado en tar en su totalidad.

Para las extensiones phar basadas en Zip, este método comprime todos los ficheros del archivo Phar utilizando la compresión especificada. Las extensiones zlib o bzip2 deben estar activadas para aprovechar esta funcionalidad. Asimismo, si uno o varios ficheros ya han sido comprimidos utilizando la compresión bzip2/zlib, la extensión adecuada debe estar activada para descomprimir los ficheros antes de recomprimirlos. Como con todas las funcionalidades que modifican el contenido de un phar, la variable INI phar.readonly debe estar a off para funcionar.

Parámetros

compression

La compresión debe ser Phar::GZ, Phar::BZ2 para beneficiarse de la compresión, o bien Phar::NONE para eliminar la compresión.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Lanza una excepción BadMethodCallException si la variable INI phar.readonly está a on, si la extensión zlib no está disponible, o si uno o varios ficheros han sido comprimidos con el algoritmo bzip2 y la extensión bzip2 no está activada.

Ejemplos

Ejemplo #1 Un ejemplo con Phar::compressFiles()

<?php
$p
= new Phar('/ruta/al/mon.phar', 0, 'mon.phar');
$p['monfichero.txt'] = 'hola';
$p['monfichero2.txt'] = 'hola';
foreach (
$p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
$p->compressFiles(Phar::GZ);
foreach (
$p as $file) {
var_dump($file->getFileName());
var_dump($file->isCompressed());
var_dump($file->isCompressed(Phar::BZ2));
var_dump($file->isCompressed(Phar::GZ));
}
?>

El resultado del ejemplo sería:

string(10) "monfichero.txt"
bool(false)
bool(false)
bool(false)
string(11) "monfichero2.txt"
bool(false)
bool(false)
bool(false)
string(10) "monfichero.txt"
int(4096)
bool(false)
bool(true)
string(11) "monfichero2.txt"
int(4096)
bool(false)
bool(true)

Ver también

add a note

User Contributed Notes 1 note

up
3
alex at phpguide dot co dot il
14 years ago
Compressing the entire archive
$phar->compress();
overrides your stub file.

Use compressFiles to have the the files compressed keeping your own stub in tact (which is not being compressed).
The compression is a little bit worth (since one file is left uncompressed), but enables you to have your own stub file executed with browser requests.

Don't get confused, compressing doesn't rise the security level of your code or obfuscating it strongly enough. The source code of your compressed phar is still easy to read.
To Top