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 — Сжимает весь архив tar/zip, используя сжатие Gzip или Bzip2
Для tar-архивов, этот метод произведёт сжатие всего архива с помощью gzip или bzip2. Результирующий файл можно распаковать с помощью команд gunzip или bunzip, либо использовать напрямую через модуль Phar.
Для zip-архивов этот метод выбросит исключение. Для gzip-сжатия должен быть доступен модуль zlib. Для bzip2-сжатия должен быть доступен модуль bzip2.
Этот метод переименовывает архив, добавляя к его имени расширение .gz
,
.bz2
или наоборот, убирающее его, если параметр типа сжатия задан как
Phar::NONE
. Также можно явно указать, какое расширение будет
иметь файл.
compression
Одна из констант: Phar::GZ
,
Phar::BZ2
, или Phar::NONE
для отключения компрессии.
extension
По умолчанию файлу назначится расширение .tar.gz
или .tar.bz2
для сжатия и .tar
, если сжатие отключено.
Возвращает объект PharData в случае успешного выполнения или null
в случае возникновения ошибки.
Выбрасывает исключение BadMethodCallException, если недоступен модуль zlib или выключен модуль bzip2.
Версия | Описание |
---|---|
8.0.0 |
extension теперь допускает значение null.
|
Пример #1 Пример использования PharData::compress()
<?php
$p = new PharData('/path/to/my.tar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p1 = $p->compress(Phar::GZ); // copies to /path/to/my.tar.gz
$p2 = $p->compress(Phar::BZ2); // copies to /path/to/my.tar.bz2
$p3 = $p2->compress(Phar::NONE); // exception: /path/to/my.tar already exists
?>
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"