如何在 Perl 中提取压缩档案?

发布于 2024-08-09 15:29:22 字数 213 浏览 4 评论 0 原文

我需要允许用户通过网络表单上传 zip 文件。服务器正在运行带有 Apache Web 服务器的 Linux。使用 Archive::Zip 等模块提取此存档是否有优势?我应该只执行带反引号的 unzip 系统调用吗?

I need to allow users to upload a zip file via a web form. The server is running Linux with an Apache web server. Are there advantages to using a module like Archive::Zip to extract this archive or should I just execute a system call to unzip with backticks?

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

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

发布评论

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

评论(3

后来的我们 2024-08-16 15:29:22

根据 Archive::Zip文档你最好使用 存档::摘录:

如果您只是要提取 zip(和/或其他存档),建议您考虑使用 Archive::Extract,因为它更容易使用并提取特定于存档的功能。

这很有趣,因为 Archive::Extract 将尝试 Archive ::Zip 首先,如果失败,则返回到 unzip 二进制文件。 因此,Archive::Zip 似乎确实是首选。

Archive::Zip 使用 压缩:: Raw::Zlib 这是 zlib 系统库的低级接口;所以它不是一个纯粹的 Perl 实现,这意味着它的性能与 unzip 类似。因此,换句话说,从性能角度来看,没有理由在 Archive::Zip 之前选择 unzip

According to the Archive::Zip documentation you'd be better off using Archive::Extract:

If you are just going to be extracting zips (and/or other archives) you are recommended to look at using Archive::Extract instead, as it is much easier to use and factors out archive-specific functionality.

That's interesting because Archive::Extract will try Archive::Zip first and then fall back to the unzip binary if it fails. So it does seem that Archive::Zip is the preferred option.

Archive::Zip uses Compress::Raw::Zlib which is a low level interface to the zlib system library; so it's not a pure Perl implementation meaning it's going to be similar in performance to unzip. So, in other words, from a performance perspective there's no reason to pick unzip ahead of Archive::Zip.

甜味超标? 2024-08-16 15:29:22

如果您执行二进制unzip,您的进程将分叉/执行并

  1. 实例化一个新进程
  2. ,消耗更多内存(在生成进程的持续时间内)

您还必须配置正确的路径<代码>解压缩。考虑到这一切,我强烈喜欢图书馆方法。

If you execute the binary unzip, your process will fork/exec and

  1. instantiate a new process
  2. consume more memory (for the duration of the spawned process)

You'll also have to configure with the correct path to unzip. Given all this, I would strongly prefer the library approach.

兮子 2024-08-16 15:29:22

其中一个问题是记忆力。我们发现了困难的方法(生产网络服务器崩溃)Archive::Tar 发生内存泄漏。因此,虽然总体而言使用模块而不是对外部命令的系统调用是一个好主意(请参阅其他响应以进行推理),但您需要确保该模块没有陷阱。

One concern is with memory. We have found the hard way (production web server crashed) that Archive::Tar had a memory leak. So while overall using a module instead of a system call to an external command is a good idea (see other responses for reasoning), you need to make sure the module has no gotchas.

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