我正在使用ZipArchive的extractTo方法解压缩一些非常大的文件(有些超过10G)的脚本。一切工作正常的小文件,但我一直在测试它与〜4G的文件,并注意到解压缩工作到一个点,然后它停止实际解压缩。但是,PHP脚本似乎正在运行。没有错误或异常被抛出。从终端我坐在文件夹中,并继续输入ls -la来观察提取文件的大小增长。它会这样做一段时间,然后停止并继续加载脚本(通过浏览器和顶部观看)。然后脚本会运行指定的超时时间(我设置为3600)并抛出超时错误。该机器运行的是Centos 6.6,16G内存,大量的处理能力和大量的磁盘空间。似乎解压缩为5011800064字节。这里是我的代码的一些选择位:PHP ZipArchive extractTo()与大文件挂起
set_time_limit(1200);
ini_set('memory_limit', '1024M');
$zip = new ZipArchive;
$res = $zip->open($zipPath);
if ($res === TRUE)
{
$extres = $zip->extractTo(
$unzipPath,
$filesToExtract
);
$zip->close();
}
任何帮助将不胜感激。我也很想知道extractTo()函数是否尝试将整个zip加载到内存中?我浏览了PHP文档,找不到任何相关的内容。所有相关的职位要么没有答案,并且在解释问题时并不具体。
编辑:只是为了确认,我有超过20G的空闲空间,并为脚本设置不同的内存限制,不会改变解压缩的字节数。
更新:我检查了httpd.conf,php.ini,并且找不到禁止解压缩操作的任何设置。
实际上,您正在将自己的服务器砰地停下来,它会将整个zip加载到内存中。这不关我的事,但为什么你通常需要提取10g +到你的服务器。另外..试试gzip – zanderwar 2014-11-30 03:49:33
啊,这解释了为什么它如此迅速地落后。还有一个很好的问题,它是数据提取程序的一部分。我使用PHP的原因是易于与Web界面集成,并具有良好的DOM功能。 – user2395126 2014-11-30 04:00:41