我对我的文件使用了一个简单的解压缩函数(如下所示),因此在进一步处理文件之前,我不必手动解压缩文件。
function uncompress($srcName, $dstName) {
$string = implode("", gzfile($srcName));
$fp = fopen($dstName, "w");
fwrite($fp, $string, strlen($string));
fclose($fp);
} 问题是,如果gzip文件很大(例如50mb),解压缩需要大量的ram来处理。
问题是:我能以块的形式解析get文件,并仍然得到正确的结果吗?或者有没有其他更好的方法来处理解压大型gzip文件的问题(即使多花了几秒钟)?
发布于 2009-08-04 20:16:53
gzfile()是一个调用gzopen、gzread和gzclose的方便方法。
所以,是的,您可以手动执行gzopen和gzread文件块。
这将以4kB块为单位解压缩文件:
function uncompress($srcName, $dstName) {
$sfp = gzopen($srcName, "rb");
$fp = fopen($dstName, "w");
while (!gzeof($sfp)) {
$string = gzread($sfp, 4096);
fwrite($fp, $string, strlen($string));
}
gzclose($sfp);
fclose($fp);
}发布于 2009-08-04 20:04:17
尝试使用
function uncompress($srcName, $dstName) {
$fp = fopen($dstName, "w");
fwrite($fp, implode("", gzfile($srcName)));
fclose($fp);
}$length参数是可选的。
发布于 2009-08-04 20:04:25
如果您在Linux主机上,拥有运行命令所需的特权,并且安装了gzip命令,您可以尝试使用类似于shell_exec的命令来调用它
我想,像这样的SOmething会这样做:
shell_exec('gzip -d your_file.gz');这样,文件就不会被PHP解压缩了。
作为附注:
注意命令是从哪里运行的(不要使用swith告诉“解压缩到那个directory")
escapeshellarg ;-)https://stackoverflow.com/questions/1229571
复制相似问题