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

发布于 2024-12-27 13:58:34 字数 751 浏览 2 评论 0原文

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

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

目前我正在使用 此类

但是:

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

所以我正在寻找一种有效的方法来处理 .tar.gz 文件,大多数重要的一点是能够使用简单的命令轻松地将文件放入其中,例如:

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

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

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

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

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

谢谢!

I have a large in-memory array of xml-files as string.

I'm looking for the most efficient way to create a readable/extractable .tar.gz file from PHP (5.3).

Currently i'm using this class.

But :

  • It does not look maintained
  • It requires files (so i'm creating thousands of files from my memory array which are useless a few ms later)

So i'm looking for a efficient way to handle a .tar.gz file, most important point is to be able to easily put files in it with a simple command like :

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

Looks like it is possible to configure PHAR with TAR & GZ, so it may be a solution?

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

Bonus question, i am not sure if it would be better to build it live (after each xml string generation) to save memory, or just wait this huge object & compress it once. The ratio proc_usage / mem_usage is unclear to me in this case.

Target max usage is 100K XML files.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

带刺的爱情 2025-01-03 13:58:34

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

您可以使用 PharData 类。它有点像 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");

It's a bit late, but for future reference :

You can create a tar.gz archive using the PharData class from the the phar extension. It's a bit like the ZipArchive, except that you can add content using the Array interface :

$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");
圈圈圆圆圈圈 2025-01-03 13:58:34

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

If you want to create tgz files, use PEAR's Archive_Tar package. It allows you to create tar + gz files on the fly from memory:

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文