这是一个非常令人恼火的错误。您可以使用以下方法解决它
$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 — 使用 Gzip 或 Bzip2 压缩压缩整个 tar/zip 存档
对于 tar 存档,此方法使用 gzip 压缩或 bzip2 压缩压缩整个存档。生成的 文件可以使用 gunzip 命令/bunzip 命令进行处理,或使用 Phar 扩展直接透明地访问。
对于 zip 存档,此方法将引发异常。必须启用 zlib 扩展才能使用 gzip 压缩进行压缩,必须启用 bzip2 扩展才能使用 bzip2 压缩进行压缩。
此外,此方法会自动重命名存档,追加 .gz
、.bz2
或如果传递 Phar::NONE
来删除压缩,则删除扩展名。或者,可以使用第二个参数指定文件扩展名。
compression
压缩必须是 Phar::GZ
、Phar::BZ2
之一以添加压缩,或 Phar::NONE
以删除压缩。
extension
默认情况下,扩展名是 .tar.gz
或 .tar.bz2
(用于压缩 tar),以及 .tar
(用于解压缩)。
如果 zlib 扩展不可用,或者 bzip2 扩展未启用,则引发 BadMethodCallException。
版本 | 描述 |
---|---|
8.0.0 |
extension 现在可以为空。 |
示例 #1 PharData::compress() 示例
<?php
$p = new PharData('/path/to/my.tar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p1 = $p->compress(Phar::GZ); // 复制到 /path/to/my.tar.gz
$p2 = $p->compress(Phar::BZ2); // 复制到 /path/to/my.tar.bz2
$p3 = $p2->compress(Phar::NONE); // 异常:/path/to/my.tar 已经存在
?>
这是一个非常令人恼火的错误。您可以使用以下方法解决它
$data = 'some.test.string';
$phar = new PharData('test.tar');
$phar->compress(Phar::GZ, substr($data, strpos($data, '.') + 1));
此方法会破坏您文件名中第一个点后的所有内容,并将其替换为 zip 扩展名(.tar.gz 等)
示例
<?php
$tarfile = "2.5.0.0-RC1.tar";
$pd = new \PharData($tarfile);
$pd->buildFromDirectory("/path/to/contents");
$pd->compress(\Phar::GZ);
?>
最终会生成一个名为 "2.tar.gz" 的文件