ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-02 01:28:19  阅读:229  来源: 互联网

标签:ziparchive php zip


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

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

由于某种原因,顶部显示CPU仍然处于95%并且正在创建一个新的tmp存档文件 – 它执行此操作再说5分钟并静默停止并保留未完成的tmp存档文件.在这个测试中 – 有不到4000个预期的文件.

所述脚本可以很好地创建较小的存档文件.

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

此问题听起来与此问题类似:
Size limit on PHP’s zipArchive class?

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

谢谢!

解决方法:

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

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

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

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

再次,似乎第四种选择是罪魁祸首.

标签:ziparchive,php,zip
来源: https://codeday.me/bug/20191002/1840678.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有