gpt4 book ai didi

php - 使用 PHP 解压缩较大的文件

转载 作者:可可西里 更新时间:2023-11-01 13:23:34 26 4
gpt4 key购买 nike

我正在尝试使用如下代码用 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 的 block 读取文件,问题解决了峰值内存使用量 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);
}

最佳答案

为什么一次读取整个文件?

 $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
fwrite($fp,"$buf");

尝试读取它的小块并将它们写入文件。

关于php - 使用 PHP 解压缩较大的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com