如何在 Perl 中提取压缩档案?
我需要允许用户通过网络表单上传 zip 文件。服务器正在运行带有 Apache Web 服务器的 Linux。使用 Archive::Zip 等模块提取此存档是否有优势?我应该只执行带反引号的 unzip
系统调用吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我需要允许用户通过网络表单上传 zip 文件。服务器正在运行带有 Apache Web 服务器的 Linux。使用 Archive::Zip 等模块提取此存档是否有优势?我应该只执行带反引号的 unzip
系统调用吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
根据 Archive::Zip文档你最好使用 存档::摘录:
这很有趣,因为 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:
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 pickunzip
ahead of Archive::Zip.如果您执行二进制
unzip
,您的进程将分叉/执行并您还必须配置正确的路径<代码>解压缩。考虑到这一切,我强烈喜欢图书馆方法。
If you execute the binary
unzip
, your process will fork/exec andYou'll also have to configure with the correct path to
unzip
. Given all this, I would strongly prefer the library approach.其中一个问题是记忆力。我们发现了困难的方法(生产网络服务器崩溃)
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.