我正在尝试使用php zip归档解压缩一个巨大的文件(压缩后400多兆,解压后超过4G)。我只需要解压缩压缩文件中的一个csv文件。我感兴趣的文件解压后超过4G。我可以解压缩到文件末尾的前三个记录,但是进程会陷入无法结束的状态。这个进程没有输出、没有错误、没有循环,它只是一直运行下去。我不知道它在做什么。我的代码很简单:
$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..源代码完好无损(在fread之前使用is_source($fp)进行检查),不会产生任何错误..关闭浏览器也无法停止它..甚至不能停止apache..必须关闭才能结束它...
有什么想法吗?谢谢。