Phar::compressFiles

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

Phar::compressFiles — Compresse tous les fichiers de l'archive Phar courante

Description

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

Note: Cette méthode nécessite que la variable de configuration INI phar.readonly soit définie à 0 pour fonctionner avec les objets Phar. Sinon, une exception PharException sera lançée.

Pour les archives phar basées sur tar, cette méthode lÚve une exception BadMethodCallException car la compression de fichier individuelle au sein d'une archive tar n'est pas supportée par le format de fichier. Utiliser Phar::compress() pour compresser une archive phar basée sur tar en entier.

Pour les extensions phar basĂ©es sur Zip, cette mĂ©thode compresse tous les fichiers de l'archive Phar en utilisant la compression spĂ©cifiĂ©e. Les extensions zlib ou bzip2 doivent ĂȘtre activĂ©es pour tirer parti de cette fonctionnalitĂ©. De plus, si un ou des fichiers ont dĂ©jĂ  Ă©tĂ© compressĂ©s en utilisant la compression bzip2/zlib, l'extension adĂ©quate doit ĂȘtre activĂ©e pour dĂ©compresser les fichiers avant de les recompresser. Comme avec toutes les fonctionnalitĂ©s qui modifient le contenu d'un phar, la variable INI phar.readonly doit ĂȘtre Ă  off pour fonctionner.

Liste de paramĂštres

compression

La compression doit ĂȘtre soit Phar::GZ, soit Phar::BZ2 pour bĂ©nĂ©ficier de la compression, ou bien Phar::NONE pour Ă©liminer la compression.

Valeurs de retour

Aucune valeur n'est retournée.

Erreurs / Exceptions

LÚve une exception BadMethodCallException si la variable INI phar.readonly est à on, si l'extension zlib n'est pas disponible, ou si un ou des fichiers ont été compressés avec l'algorithme bzip2 et que l'extension bzip2 n'est pas activée.

Exemples

Exemple #1 Un exemple avec Phar::compressFiles()

<?php
$p
= new Phar('/chemin/vers/mon.phar', 0, 'mon.phar');
$p['monfichier.txt'] = 'salut';
$p['monfichier2.txt'] = 'salut';
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));
}
?>

L'exemple ci-dessus va afficher :

string(14) "monfichier.txt"
bool(false)
bool(false)
bool(false)
string(15) "monfichier2.txt"
bool(false)
bool(false)
bool(false)
string(14) "monfichier.txt"
int(4096)
bool(false)
bool(true)
string(15) "monfichier2.txt"
int(4096)
bool(false)
bool(true)

Voir aussi

add a note

User Contributed Notes 1 note

up
3
alex at phpguide dot co dot il ¶
15 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.