PHP输出流过滤器w/zlib.inflate创建空白文件

PHP输出流过滤器w/zlib.inflate创建空白文件,php,ftp,fopen,zlib,Php,Ftp,Fopen,Zlib,我正在尝试对ftp_fget()使用的文件指针使用“zlib.inflate”内置流过滤器。这个想法是,如果文件被压缩,这将使它膨胀。在我连接流过滤器之前,一切都正常 $local = $remote = 'whatever.txt'; # Create local file to transfer ftp file into $localFile = fopen($local, 'w'); # Attach inflation stream filter wit

我正在尝试对ftp_fget()使用的文件指针使用“zlib.inflate”内置流过滤器。这个想法是,如果文件被压缩,这将使它膨胀。在我连接流过滤器之前,一切都正常

    $local = $remote = 'whatever.txt';
    # Create local file to transfer ftp file into
    $localFile = fopen($local, 'w');
    # Attach inflation stream filter with write filter, so we can inflate as we write to the new file
    stream_filter_append($localFile, 'zlib.inflate', STREAM_FILTER_WRITE);
    # Use fget to read remote file into local with optional inflation
    # $this->_connection(); returns csv resource
    $result    = ftp_fget($this->_connection(), $localFile, $remote, FTP_BINARY);
这看起来应该是一个非常直截了当的事情,但它只是给了我一个空白文件。有什么想法吗

[编辑]在Debian Lenny上运行PHP 5.2.6。Zlib已安装并显示在phpinfo()下

[编辑2]这似乎与此错误有关。如果是这样的话,我会结束这一切


[Edit 3]用PHP5.4.4创建了一个Vb实例,我仍然有同样的问题,所以我不认为这是一个bug。

这是我对流如何工作的误解。它们不支持命令行gzip实用程序将使用的相同头文件和尾文件。(开头为2字节,结尾为校验和)。我将不得不从另一个角度来探讨这个问题。我将把它标记为已解决。

gzip头和尾分别是10+和8个字节。zlib头和尾是您正在谈论的两个字节,分别为2和4个字节。
zlib.inflate
过滤器在没有头或尾的原始放气流上运行。您可以编写自己的过滤器,围绕RFC1952中定义的deflate流解释gzip头和尾。