gpt4 book ai didi

php - 使用 PHP 创建 .tar.gz 文件

转载 作者:可可西里 更新时间:2023-10-31 23:15:28 25 4
gpt4 key购买 nike

我正在从事的项目需要创建 .tar.gz 文件并将其提供给外部服务。此外部服务仅适用于 .tar.gz,因此另一种类型的存档是不可能的。我正在处理的代码将执行的服务器不允许访问系统调用。所以 systemexec、反引号等都不是什么好东西。这意味着我必须依靠纯 PHP 实现来创建 .tar.gz 文件。

经过一些研究,PharData 似乎有助于实现这一结果。但是我遇到了困难,需要一些指导。

考虑以下文件夹布局:

parent folder
- child folder 1
- child folder 2
- file1
- file2

我正在使用下面的代码片段创建 .tar.gz 存档,它可以解决问题,但最终结果有一个小问题,它不包含父文件夹,但包含其中的所有内容。

$pd = new PharData('archive.tar');

$dir = realpath("parent-folder");

$pd->buildFromDirectory($dir);

$pd->compress(Phar::GZ);

unset( $pd );

unlink('archive.tar');

创建存档时,它必须包含上述确切的文件夹布局。使用上面提到的代码片段,存档包含除父文件夹之外的所有内容,这是外部服务的交易破坏者:

- child folder 1
- child folder 2
- file1
- file2

buildFromDirectory 的描述确实提到了以下内容,因此它不包含存档中的父文件夹是可以理解的:

Construct a tar/zip archive from the files within a directory.

我也尝试过使用 buildFromIterator 但最终结果也是一样的,即父文件夹不包含在存档中。我能够使用 addFile 获得所需的结果,但这非常慢

经过更多研究,我发现了以下库:https://github.com/alchemy-fr/Zippy .但这需要服务器上不可用的 composer 支持。如果有人可以指导我实现最终结果,我将不胜感激。我也愿意使用其他一些方法或库,只要它是纯 PHP 实现并且不需要任何外部依赖项。不确定它是否有帮助,但是执行代码的服务器有 PHP 5.6

最佳答案

使用“父文件夹”的父文件夹作为 Phar::buildFromDirectory() 的基础并使用它的第二个参数将结果限制为“父文件夹”,例如:

$parent = dirname("parent-folder");
$pd->buildFromDirectory($parent, '#^'.preg_quote("$parent/parent-folder/", "#").'#');
$pd->compress(Phar::GZ);

关于php - 使用 PHP 创建 .tar.gz 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45530782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com