将内存中的PHP数组压缩为.tar.gz文件(PHAR?)

时间:2012-01-18 15:36:14

标签: php compression gzip phar

我有一个大的内存中的xml文件数组作为字符串。

我正在寻找从PHP(5.3)创建可读/可提取的.tar.gz文件的最有效方法。

目前我正在使用this class

但是:

  • 看起来没有维护
  • 它需要文件(所以我从我的内存阵列创建数千个文件,几毫秒后无用)

所以我正在寻找一种处理.tar.gz文件的有效方法,最重要的一点是能够通过简单的命令轻松地将文件放入其中:

$ myArchive-> putFileFromString($ fileName,$ dataString);

看起来可以使用TAR& amp;来配置PHAR。 GZ,这可能是一个解决方案吗?

$p = $p->convertToExecutable(Phar::TAR, Phar::GZ);

奖金问题,我不确定在现场构建它(在每个xml字符串生成之后)是否更好以节省内存,或者只是等待这个巨大的对象&压缩一次。在这种情况下,proc_usage / mem_usage的比例对我来说不清楚。

目标最大使用量是100K XML文件。

谢谢!

2 个答案:

答案 0 :(得分:3)

有点晚了,但将来参考:

您可以使用phar扩展名中的PharData类创建tar.gz存档。它有点像ZipArchive,除了你可以使用Array接口添加内容:

$archive = new PharData("outfile.tar");
foreach ($xmlfiles as $name => $data) {
    $archive[$name] = $data;
}

// compress to "outfile.tar.gz
$gzipped = $archive->compress(Phar::GZ);

// delete outfile.tar
unset($archive);
unlink("outfile.tar");

答案 1 :(得分:0)

如果要创建tgz文件,请使用PEAR的Archive_Tar包。它允许您从内存中动态创建tar + gz文件:

require_once 'Archive/Tar.php';
$t = new Archive_Tar('/path/to/dest.tar.gz', 'gz');
foreach ($xmlfiles as $key => $content) {
    $t->addString($key . '.xml', $content);
}