較大的文件我試圖解壓到PHP的14MB歸檔與這樣的代碼:解壓用PHP
$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);
}
它無法在我的本地與經典的「Allowed memory size of blablabla bytes exhausted
」 128MB內存限制。在服務器上,我有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);
}
什麼是zip文件的* uncompressed *大小? – 2010-07-16 08:30:08
是否使用命令行工具選項? – 2010-07-16 08:30:47
未壓縮的大小約爲110MB。 不幸的是,使用命令行不是一個選項。 – cypher 2010-07-16 08:32:15