file_get_contents等效于gzip压缩文件

时间:2013-08-13 10:36:17

标签: php file gzip

file_get_contents相同的功能是什么,它读取使用gzwrite函数编写的文本文件的全部内容?

5 个答案:

答案 0 :(得分:11)

使用stream wrappers

可以更轻松
file_get_contents('compress.zlib://'.$file);

https://stackoverflow.com/a/8582042/1235815

答案 1 :(得分:2)

显然是gzread ..或者你的意思是file_put_contents

修改 如果您不想使用句柄,请使用readgzfile

答案 2 :(得分:1)

根据手册中的评论我写了一个我正在寻找的功能:

/**
 * @param string $path to gzipped file
 * @return string
 */
public function gz_get_contents($path)
{
    // gzread needs the uncompressed file size as a second argument
    // this might be done by reading the last bytes of the file
    $handle = fopen($path, "rb");
    fseek($handle, -4, SEEK_END);
    $buf = fread($handle, 4);
    $unpacked = unpack("V", $buf);
    $uncompressedSize = end($unpacked);
    fclose($handle);

    // read the gzipped content, specifying the exact length
    $handle = gzopen($path, "rb");
    $contents = gzread($handle, $uncompressedSize);
    gzclose($handle);

    return $contents;
}

答案 3 :(得分:1)

我试过@Sfisioza的答案,但我遇到了一些问题。它还读取文件两次,一次和非压缩,然后再次压缩。这是一个浓缩版本:

public function gz_get_contents($path){
    $file = @gzopen($path, 'rb', false);
    if($file) {
        $data = '';
        while (!gzeof($file)) {
            $data .= gzread($file, 1024);
        }
        gzclose($file);
    }
    return $data;
}

答案 4 :(得分:0)

file_get_contents("php://filter/zlib.inflate/resource=/path/to/file.gz");

我不确定它将如何处理gz文件头。