Php gzip总是需要扩展吗?

Php gzip总是需要扩展吗?,php,file,compression,gzip,Php,File,Compression,Gzip,我正在根据以下内容压缩文件: 如果我使用$gz\u file\u生成=$dest。“.gz”我得到一个filename.db.gz文件,其中包含filename.db 如果我使用$gz\u file\u生成=substr($dest,0,-3)。“.gz”我得到一个文件名.gz文件。但是如果我打开它,文件名就没有扩展名(缺少.db) gzip是否总是需要扩展?是的,除非编码器写入FNAME头,而FNAME头不需要 解包时,如果FNAME头不存在,默认情况下解包应用程序会将源文件的.gz扩展名细分

我正在根据以下内容压缩文件:

如果我使用
$gz\u file\u生成=$dest。“.gz”
我得到一个
filename.db.gz
文件,其中包含
filename.db

如果我使用
$gz\u file\u生成=substr($dest,0,-3)。“.gz”我得到一个
文件名.gz
文件。但是如果我打开它,文件名就没有扩展名(缺少.db)


gzip是否总是需要扩展?

是的,除非编码器写入FNAME头,而FNAME头不需要


解包时,如果FNAME头不存在,默认情况下解包应用程序会将源文件的
.gz
扩展名细分为子扩展名,以命名目标文件,在这种情况下,会产生裸露的
文件名

如何编写FNAME头?是否可以使用PHP或我需要一个特殊的库?@testing没有filename参数,但可能另一个库有它。但是为什么您会与使用
.gz
的实际标准有所不同呢?我有一个规范,我必须满足它。但我认为规格必须改变。。。不过,最好知道是否还有其他库。@测试我记不清,但PHP有多个压缩库。使用
exec()
是使用操作系统二进制文件的选项吗?看来规范可以更改。谢谢你的提示!
$file_to_compress = $dest;
//$gz_file_to_produce = $dest . ".gz";
$gz_file_to_produce = substr($dest, 0, -3) . ".gz";

$data = implode("", file($file_to_compress));
$gzdata = gzencode($data, 9);
$fp = fopen($gz_file_to_produce, "w");
fwrite($fp, $gzdata);
fclose($fp);