我正在尝试使用 PHP 解压缩一个 14MB 的存档,代码如下:
$zip = zip_open("c:\kosmas.zip");
while ($zip_entry = zip_read($zip)) {
$fp = fopen("c:/unzip/import.xml", "w");
if (zip_entry_open($zip, $zip_entry, "r")) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
fwrite($fp,"$buf");
zip_entry_close($zip_entry);
fclose($fp);
break;
}
zip_close($zip);
}
它在我的本地主机上失败,内存限制为 128MB,经典的“ Allowed memory size of blablabla bytes exhausted
”。在服务器上,我有 16MB 的限制,有没有更好的方法可以让我适应这个限制?我不明白为什么这必须分配超过 128MB 的内存。提前致谢。
解决方案: 我开始读取 10Kb 块中的文件,使用峰值内存使用 arnoud 1.5MB 解决了问题。
$filename = 'c:\kosmas.zip';
$archive = zip_open($filename);
while($entry = zip_read($archive)){
$size = zip_entry_filesize($entry);
$name = zip_entry_name($entry);
$unzipped = fopen('c:/unzip/'.$name,'wb');
while($size > 0){
$chunkSize = ($size > 10240) ? 10240 : $size;
$size -= $chunkSize;
$chunk = zip_entry_read($entry, $chunkSize);
if($chunk !== false) fwrite($unzipped, $chunk);
}
fclose($unzipped);
}