我想在 PHP 中使用 gzip 压缩一些文件..
当输出文件被保存到文件中时,它会正常工作。当文件打开时,它看起来像这样
但当输出作为字符串返回时不是这样。然后打开的文件看起来是这样的。为什么 tar 文件显示在 gzip 文件中?
public function compress(){
if($this->stream){
return gzencode($this->data, 9);
}
else{
$gz = gzopen('test.tar.gz', 'w9');
gzwrite($gz, $this->data);
gzclose($gz);
}
}
通过字符串输出发送到浏览器的 header
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
最佳答案
这看起来像是 WinRAR 文件扩展名解析问题。
在第一个示例中,您的文件名为 .tar.gz
并且 WinRAR 知道如何处理 tar
文件和 gz
压缩,所以它能够解压缩内存中的 tar header 并检索其中包含的文件列表。
在您的第二个示例中,文件名为 .tar-19.gz
,因此 WinRAR 很乐意处理 gz 压缩,但不知道 tar-19
是什么格式应该是(它甚至不尝试从标题启发式猜测)
我敢打赌,如果您使用 tar.gz
扩展名流式传输文件,它会打开得很好。
关于php - gzip 并作为字符串返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18601707/