我试图解压缩一个巨大的文件(400 + M压缩以及4G解压缩)使用php zip压缩文件。我只解压缩压缩文件中的一个csv文件..我感兴趣的文件解压缩超过4G ..我从文件末尾获得3条记录,并且该过程进入lala land。 。我指的是过程只是那张..没有输出..没有错误,没有循环它只是...我还没有线索,以什么做了..我的代码很简单:PHP解压缩大文件
$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE)
{
$num = $zip->numFiles;
for($i = 0; $i < $zip->numFiles; $i++)
{
$filename = $zip->getNameIndex($i);
// if its the file I want then...
$content = '';
// my output file .. yes I've already checked to make sure the dir exists
$unzipped = fopen($dir ."/2" . $filename , 'wb');
$fp = $zip->getStream($filename);
if(!$fp) exit("failed\n");
while (!feof($fp))
{
$chunkSize = 10240;
$contents = fread($fp, $chunkSize);
$fwrite = fwrite($unzipped, $contents);
}
fclose($fp);
fclose($unzipped);
}
$zip->close();
fclose($filename);
}
我删除了写入另一个文件以跟踪进度的写入语句。我得到了大部分文件......(正如我所说的3个记录中缺少整个文件)......但这个过程似乎在某个地方发生......它发生在fread上,我无法弄清楚发生了什么事..它没有达到eof ..源是完整的(使用is_source($ fp)在fread之前进行检查..它不会抛出错误..关闭浏览器并不能阻止它..甚至不能停止阿帕奇..不得不关闭,结束它...
任何想法?
感谢
据有人在文档页面中的功能似乎使用相当多的内存自身。所以如果这是真的,记忆是问题在这里,这可能不是解决方案。 – Blizz
嗨克里斯,试着用有趣的结果,它没有复制整个文件,但它并没有进入拉拉陆地,这种导致我相信第一个问题可能是最初的zip流..它可能没有得到一切......但这是一个不同的问题,我需要在发布之前进行一些研究。再次感谢。 – Bridget