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

| 我的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个。 如上所述的脚本可以很好地创建较小的存档文件。 在几组不同的大型源数据上进行了测试-大型文件的结果相同。 这个问题听起来类似于以下问题: PHP的zipArchive类的大小限制? 我以为ls -l命令可能返回2K块的计数,因此2120011776将接近4GB,但该大小以字节为单位-xxxx.zip.tmpxx文件的大小。 谢谢!     
已邀请:
可能有很多事情。我假设您有足够的可用磁盘空间来处理该过程。正如其他人提到的那样,通过编辑php.ini文件或在代码本身中使用ini_set()函数,可能会解决一些问题。 您的计算机有多少内存?如果它耗尽了您的实际内存,那么一定大小的内存会定期终止。因此,在脚本执行之前检查可用内存使用情况,并在脚本执行时对其进行监视。 第三种选择可以基于文件系统本身。我在CentOS上没有太多经验,但是某些文件系统不允许文件超过2 GB。尽管从产品页面看来,CentOS上的大多数系统似乎都可以处理它。 如果您查看上面链接的产品页面,可能会看到第四个选项,这似乎是最有前途的,另一个可能的罪魁祸首是“最大x86每个进程虚拟地址空间”,大约为3gb。 x86_64约为2tb,因此请检查处理器的类型。 同样,第四个选择似乎是罪魁祸首。     
您是否在php中使用了set_limit变量。 您可以使用。 Htacess或PHP脚本内。 在脚本内部set_time_limit(0); 在.htaccess内部php_value memory_limit 214572800;     
当文件很大时,将需要花费一些时间来创建其存档ZIP,但是在PHP(php.ini)中,该文件的执行时间最长,因此您必须尝试增加该值。     
php.ini中有一个设置,最大执行时间 也许这被炒鱿鱼了! 尝试增加价值! 操作系统的文件大小限制也不同,请尝试检查一下!     

要回复问题请先登录注册