解压缩一组图像时出错


Error when unzipping a group of images

我正在从archive.org导入公共领域的书籍到我的网站,并设置了一个php导入脚本来完成它。但是,当我尝试导入图像并运行

exec( "unzip $images_file_arg -d $book_dir_arg", $output, $status );

偶尔会返回$status为1。这样可以吗?目前导入的图片我还没有遇到任何问题。我查找了解压的手册页,但它没有告诉我太多。这可能会导致问题,我是否必须单独检查每个图片,或者我是安全的?

EDIT:哎呀。我应该马上查看手册的。它们告诉我们错误码的含义:

退出状态(或错误级别)近似于PKWARE定义的退出代码,取以下值,VMS除外:

  1. 正常;

  2. 遇到一个或多个警告错误,但处理已成功完成。这包括由于不支持压缩方法或使用未知密码加密而跳过一个或多个文件的zipfiles。

  3. 在zipfile格式中检测到一个通用错误。无论如何,处理可能已经成功完成;其他归档器创建的一些损坏的zip文件有简单的解决方法。

  4. 在zipfile格式中检测到严重错误。

(更多)

所以,很明显,有些档案可能会跳过其中的文件,但zip没有崩溃;它只是做了它能做的。


它确实应该可以工作,但是对于某些文件名有一些复杂性。他们中是否有不寻常的角色?escapeshellarg当然是值得研究的。如果您得到一个坏的返回状态,您应该关注,因为这意味着zip退出了一些错误或其他。至少,我建议您记录这些情况下的文件名(error_log($filename)),并查看是否有任何可能导致问题的内容。zip本身完全独立于PHP运行,如果shell向它传递了正确的参数,并且文件确实已下载并准备解压缩,那么它将正常运行。

也许您更适合使用php集成的ziparchive类。http://www.php.net/manual/de/class.ziparchive.php

特别是http://www.php.net/manual/de/function.ziparchive-extractto.php如果提取成功,它返回TRUE,否则返回FALSE。