次のようなコードを使用して、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 のチャンクでファイルの読み取りを開始しました。問題は 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);
}