PHP 8.3.4 Released!

Phar::compressFiles

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

Phar::compressFilesСжимает все файлы в текущем Phar-архиве

Описание

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

Замечание:

Для корректной работы с объектами Phar этому методу необходима установка значения php.ini phar.readonly в 0. В противном случае, будет выброшено исключение PharException.

В случае использования с phar-архивами, основанными на tar, этот метод выбрасывает исключение BadMethodCallException, поскольку сжатие отдельных файлов внутри tar-архива не поддерживается данным форматом. Для сжатия целого phar-архива, основанного на tar, используйте Phar::compress().

В случае использования с phar-архивами, основанными на zip или phar, этот метод сжимает все файлы в Phar-архиве используя указанный алгоритм сжатия. Для возможности воспользоваться данным методом должен быть включён модуль zlib или bzip2. Кроме того, если какие-либо файлы в архиве уже сжаты с использованием bzip2/zlib-сжатия, то для их распаковки перед повторным сжатием должен быть включён соответствующий модуль. Как и в случае с другим функционалом, модифицирующим содержание phar-архива, для успешной работы данного метода необходимо, чтобы INI-переменная phar.readonly была отключена.

Список параметров

compression

Сжатие должно быть определено одной из констант: Phar::GZ, Phar::BZ2 для использования соответствующего алгоритма сжатия, или Phar::NONE для распаковки.

Возвращаемые значения

Функция не возвращает значения после выполнения.

Ошибки

Выбрасывает исключение BadMethodCallException, если INI-переменная phar.readonly включена, модуль zlib не доступен или если какие-либо файлы внутри архива были сжаты при помощи bzip2-сжатия и модуль bzip2 не включён.

Примеры

Пример #1 Пример использования Phar::compressFiles()

<?php
$p
= new Phar('/путь/к/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'привет';
$p['myfile2.txt'] = 'привет';
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));
}
?>

Результат выполнения приведённого примера:

string(10) "myfile.txt"
bool(false)
bool(false)
bool(false)
string(11) "myfile2.txt"
bool(false)
bool(false)
bool(false)
string(10) "myfile.txt"
int(4096)
bool(false)
bool(true)
string(11) "myfile2.txt"
int(4096)
bool(false)
bool(true)

Смотрите также

add a note

User Contributed Notes 1 note

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