我需要允许用户通过网络表单上传 zip 文件。该服务器使用 Apache Web 服务器运行 Linux。使用像Archive::Zip这样的模块来提取这个档案有什么好处,还是我应该只unzip
使用反引号执行系统调用?
问问题
6071 次
3 回答
14
根据Archive::Zip 文档,您最好使用Archive::Extract:
如果您只是要提取 zip(和/或其他存档),建议您使用 Archive::Extract 代替,因为它更容易使用并且排除了特定于存档的功能。
这很有趣,因为Archive::Extract 将首先尝试 Archive::Zip,然后如果失败则回退到二进制文件。unzip
因此,Archive::Zip 似乎是首选选项。
Archive::Zip 使用Compress::Raw::Zlib,它是 zlib 系统库的低级接口;所以它不是一个纯粹的 Perl 实现,这意味着它的性能将类似于unzip
. 因此,换句话说,从性能的角度来看,没有理由选择unzip
Archive::Zip。
于 2009-11-03T17:07:13.383 回答
5
如果您执行二进制文件unzip
,您的进程将 fork/exec 和
- 实例化一个新进程
- 消耗更多内存(在生成的进程期间)
您还必须配置正确的unzip
. 鉴于这一切,我更喜欢图书馆的方法。
于 2009-11-03T17:00:51.993 回答
1
一个问题是记忆。我们发现Archive::Tar
了内存泄漏的困难方式(生产 Web 服务器崩溃)。因此,虽然总体上使用模块而不是对外部命令的系统调用是一个好主意(请参阅其他响应以了解推理),但您需要确保模块没有陷阱。
于 2009-11-04T02:51:13.093 回答