2011-04-21 27 views
9

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

脚本运行大约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文件。

谢谢!

+11

如果您的PHP运行32位服务器,则ZIP扩展可能在内部限制为2GB文件(带符号整数)。无论如何,不​​知道.zip格式本身的功能如何。 – mario 2011-04-21 14:13:21

+0

如果脚本不完全死亡,那么它不是一个时间或内存限制问题。 Zip库中必须有一个限制。文档是否显示任何类型的上限? – 2011-04-21 14:35:23

+0

没有限制,我已经能够看到。如果内存用完了,我会希望看到一个PHP错误,并且正如注意到脚本在我的情况下在ziparchive完成/失败之后继续执行代码。 – blainelang 2011-04-21 19:46:25

回答

-2

有一个在php.ini中的设置最大执行时间
也许这是被解雇!
尝试增加值!

操作系统也有不同的文件大小限制,请尝试检查!

+1

脚本运行8分钟并且不会死亡,zip方法在完成之前返回。这表明这不是时间限制问题。 – 2011-04-21 14:36:19

-1

你有在php中使用set_limit变量。

您可以使用。 Htacess或在PHP脚本中。 脚本里面set_time_limit(0); .htaccess php_value memory_limit 214572800;

+0

CLI进程没有内存限制。 – pgampe 2014-05-27 23:27:19

2

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

你的机器有多少内存?如果它耗尽你的实际记忆,那么在一定尺寸之后它会定期中止是有意义的。因此,检查脚本之前的可用内存使用情况,并在脚本执行时监视它。

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

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

再一次,它似乎是第四个选项是罪魁祸首。

+0

我也会说你碰到某种32位整数(有符号?!)的限制。 – pgampe 2014-05-27 23:28:47

-1

当您的文件大小很大时,需要一段时间才能制作ZIP压缩文件,但是在PHP(php.ini)中最大的执行时间,因此您必须尝试增加该值。