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

时间:2009-11-03 16:58:58

标签: perl archive unzip

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

3 个答案:

答案 0 :(得分:14)

根据Archive::Zip documentation,您最好使用Archive::Extract

  

如果您要提取拉链(和/或其他存档),建议您使用Archive :: Extract,因为它更容易使用并且会导致特定于存档的功能。

这很有趣,因为Archive::Extract will try Archive::Zip first and then fall back to the unzip binary if it fails.所以看起来Archive :: Zip似乎是首选。

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

答案 1 :(得分:5)

如果执行二进制unzip,您的进程将fork / exec和

  1. 实例化新流程
  2. 消耗更多内存(在生成进程的持续时间内)
  3. 您还必须使用unzip的正确路径进行配置。鉴于这一切,我非常希望采用图书馆方法。

答案 2 :(得分:1)

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