使用PHP创建.tar.gz文件

阿南德·沙(Anand Shah)

我正在从事的项目需要创建.tar.gz档案并将其提供给外部服务。该外部服务仅适用于.tar.gz,因此毫无疑问要使用其他类型的存档。我正在处理代码的服务器将无法执行系统调用。因此system,,exec反引号等不是bueno。这意味着我必须依靠纯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确实提到了以下内容,因此可以理解它在存档中不包含父文件夹:

根据目录中的文件构造tar / zip归档文件。

我也尝试过使用,buildFromIterator但最终结果也相同,即,父文件夹未包含在存档中。我能够使用来获得预期的结果,addFile但是速度很慢

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

用户3942918

使用“ parent-folder”的父项作为基础,Phar::buildFromDirectory()并使用其第二个参数将结果限制为“ parent-folder”,例如:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建.tar.gz文件时不包括目录

创建tar.gz时避免多余的文件

如何在C#中创建tar.gz文件

脚本中的sed创建了损坏的.tar.gz文件

如何重命名.tar.gz文件而不提取内容并在UBUNTU中创建新的.tar.gz文件?

如何使用pkg.tar.gz文件安装旧的Gitkraken?

如何使用 gnupg python 模块解密 tar.gz 文件

从根目录使用tar.gz打包文件

使用pip安装下载的tar.gz文件

使用单个命令打开.tar.gz文件

使用tar.gz文件作为Amazon Athena的源

如何完全从Java中的内存(无文件)中的对象创建tar或tar.gz存档

如何使用 Python 在 flat tar.gz 中保存 tar 文件

如何使用Windows的7-Zip GUI创建.tar.gz文件?

使用 python setup.py install 在 dist 文件夹中创建 tar.gz

在Linux上使用sed输出的特定文件列表创建tar gz

尝试从文件和目录创建tar.gz文件时出现“写得太长”错误

在子目录中创建一个包含以 C 开头的文件的 tar.gz 文件

使用awk在tar.gz文件内的文件内打印语句?

使用 python 从 .tar.gz 文件中仅提取 jpg 文件

将tar.gz文件解压缩到目录并创建目录(如果不存在)

提取.gz文件中的.TAR文件

如何使用gunzip和tar将tar.gz文件解压缩到所需的特定目录?

在使用HTTP客户端,但正常工作与curl命令发布tar.gz文件获取错误

如何使用带有gzip压缩选项的pandas read_csv读取tar.gz文件?

如何不使用pip install从tar.gz文件安装Python软件包

安装Java-我应该使用.rpm文件还是.tar.gz?

在Pyspark中读取tar.gz存档时使用特定模式过滤文件

如何使用`mongorestore`通过TAR.GZ文件还原数据库