PHP在创建大型.zip文件时中止

时间:2011-04-21 14:09:14

标签: php zip ziparchive

我的php脚本使用ZipArchive()在CentOS 5.6和PHP 5.2.12上运行,并成功创建1.6Gb以上的.zip文件,但不是2GB或更大的大型存档 - PHP中止没有明显错误。 PHP错误日志或stderr中没有任何内容。该脚本正在cmd行执行,而不是以交互方式执行。

脚本运行大约8分钟,临时存档增长,在检查文件大小时,最后一个列表显示tmp文件大小为2120011776,然后tmp文件消失,PHP脚本通过逻辑运行并执行后的代码存档创建。

出于某种原因top显示CPU仍然处于95%并且正在创建一个新的tmp存档文件 - 它执行此操作再说5分钟以上并静默停止并保留未完成的tmp存档文件。在这个测试中 - 预期文件少于4000个。

如上所述,脚本可以很好地创建较小的存档文件。

测试了几组不同的大型源数据 - 大文件的结果相同。

此问题与此问题类似: Size limit on PHP's zipArchive class?

我想也许ls -l命令返回了2K块的计数,因此2120011776将接近4GB但是该大小以字节为单位 - xxxx.zip.tmpxx文件的大小。

谢谢!

4 个答案:

答案 0 :(得分:3)

可能有很多事情。我假设你有足够的可用磁盘空间来处理这个过程。正如其他人提到的那样,通过编辑php.ini文件或在代码本身中使用ini_set()函数可能会解决一些问题。

您的机器有多少内存?如果它耗尽了你的实际记忆,那么它会在一定大小后经常中止。因此,请检查脚本之前的可用内存使用情况,并在脚本执行时对其进行监视。

第三个选项可以基于文件系统本身。我对CentOS没有太多经验,但有些文件系统不允许超过2 GB的文件。虽然从product page开始,似乎CentOS上的大多数系统都可以处理它。

如果您查看上面链接的产品页面,则会出现第四个看似最有希望的选项,另一个可能的罪魁祸首是“每个进程虚拟地址空间最大x86”,大约3GB。 x86_64约为2tb,因此请检查处理器的类型。

同样,似乎第四种选择是罪魁祸首。

答案 1 :(得分:-1)

你是否在php中使用了set_limit变量。

你可以使用。 Htacess或在PHP脚本中。 在脚本内部set_time_limit(0); 在.htaccess内部php_value memory_limit 214572800;

答案 2 :(得分:-1)

当你的文件大小很大时,需要时间来使其存档ZIP,但在PHP(php.ini)最长执行时间,所以你必须尝试增加该值。

答案 3 :(得分:-2)

php.ini中有一个设置最长执行时间
也许这就被解雇了! 试着增加价值!

OS的文件大小限制也不同,请尝试检查一下!