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


Compress in-memory PHP array to a .tar.gz file (PHAR?)

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

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

目前我正在使用这个类。

但是:

  • 它看起来没有保养
  • 它需要文件(所以我从内存阵列中创建了数千个文件,几毫秒后这些文件就没用了)

因此,我正在寻找一种有效的方法来处理.tar.gz文件,最重要的一点是能够用一个简单的命令轻松地将文件放入其中,比如:

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

看起来可以用TAR&GZ,所以这可能是一个解决方案?

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

额外的问题是,我不确定是在每次生成xml字符串后实时构建它来节省内存更好,还是只是等待这个巨大的对象&压缩一次。在这种情况下,我不清楚proc_usage/mem_usage的比例。

目标最大使用量为10万个XML文件。

谢谢!

有点晚了,但供将来参考:

您可以使用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");

如果要创建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);
}