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

我正在尝试使用

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内存限制,经典的“blablabla字节的允许内存大小耗尽”.在服务器上,我有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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值