首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP中的gzip解压大文件

用PHP中的gzip解压大文件
EN

Stack Overflow用户
提问于 2009-08-04 19:53:38
回答 4查看 19.7K关注 0票数 15

我对我的文件使用了一个简单的解压缩函数(如下所示),因此在进一步处理文件之前,我不必手动解压缩文件。

代码语言:javascript
复制
function uncompress($srcName, $dstName) {
    $string = implode("", gzfile($srcName));
    $fp = fopen($dstName, "w");
    fwrite($fp, $string, strlen($string));
    fclose($fp);
} 

问题是,如果gzip文件很大(例如50mb),解压缩需要大量的ram来处理。

问题是:我能以块的形式解析get文件,并仍然得到正确的结果吗?或者有没有其他更好的方法来处理解压大型gzip文件的问题(即使多花了几秒钟)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-04 20:16:53

gzfile()是一个调用gzopen、gzread和gzclose的方便方法。

所以,是的,您可以手动执行gzopen和gzread文件块。

这将以4kB块为单位解压缩文件:

代码语言:javascript
复制
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);
}
票数 47
EN

Stack Overflow用户

发布于 2009-08-04 20:04:17

尝试使用

代码语言:javascript
复制
function uncompress($srcName, $dstName) {
    $fp = fopen($dstName, "w");
    fwrite($fp, implode("", gzfile($srcName)));
    fclose($fp);
}

$length参数是可选的。

票数 1
EN

Stack Overflow用户

发布于 2009-08-04 20:04:25

如果您在Linux主机上,拥有运行命令所需的特权,并且安装了gzip命令,您可以尝试使用类似于shell_exec的命令来调用它

我想,像这样的SOmething会这样做:

代码语言:javascript
复制
shell_exec('gzip -d your_file.gz');

这样,文件就不会被PHP解压缩了。

作为附注:

注意命令是从哪里运行的(不要使用swith告诉“解压缩到那个directory")

  • You可能还想看一下escapeshellarg ;-)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1229571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档