我需要允许用户通过网络表单上传zip文件。服务器正在运行带有Apache Web服务器的Linux。使用像Archive::Zip之类的模块来提取此存档是否有优势,或者我是否应该使用反引号执行对unzip
的系统调用?
答案 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和
您还必须使用unzip
的正确路径进行配置。鉴于这一切,我非常希望采用图书馆方法。
答案 2 :(得分:1)
一个问题是记忆。我们发现Archive::Tar
内存泄漏的困难方式(生产Web服务器崩溃)。因此,虽然整体使用模块而不是系统调用外部命令是一个好主意(请参阅其他响应的推理),但您需要确保模块没有陷阱。