gzopen() 之后的 gzXXX() 与 fXXX() 函数

gzXXX() versus fXXX() functions after gzopen()

我有像这样打开和处理 gzip 文件的应用程序:

$fh = gzopen($fn, "r");
if ($fh) {
    while ($line = fgets($fh)) {
        ...
    }
}

它工作正常,使用 fgets() 和 gzip 文件句柄。今天在回答another question的时候发现所有的文件读写函数也有gz版本,所以可以写成

$fh = gzopen($fn, "r");
if ($fh) {
    while ($line = gzgets($fh)) {
        ...
    }
}

此外,我刚刚尝试了以下方法并且有效:

$fh = fopen(".bashrc", "r");
$line = gzgets($fh);
echo $line;

所以 gzXXX()fXXX() 读写函数之间真的有什么显着的区别吗,或者它们只是同义词,区别取决于文件的打开方式(以及进一步混淆,gzopen() 也将打开非 gzip 文件,然后不解压读取。

Based on the source, gzopen() uses php_stream_gzopen() 到 return 包装流,这就是 f... 系列函数在资源上运行良好的原因。 (这类似于流包装器允许您使用 http:// 等打开类文件对象的方式。)

至于为什么可以fopen()然后gzgets()your hunch is correctgzclosegzeofgzgetcgzgetsgzpassthrugzputsgzreadgzrewind、[= 24=、gztellgzwrite 都是相同 f... 函数的别名。