【发布时间】:2012-02-07 02:04:35
【问题描述】:
我想知道与这段代码等效的 PHP 是什么:
require "zlib"
foo = Zlib::Deflate.new()
bar = "bar"
puts foo.deflate(bar, Zlib::SYNC_FLUSH).unpack('H*')
puts foo.deflate(bar, Zlib::SYNC_FLUSH).unpack('H*')
puts foo.deflate(bar, Zlib::SYNC_FLUSH).unpack('H*')
foo.close()
输出:
789c4a4a2c02000000ffff
4a4a2c02000000ffff
022200000000ffff
我尝试过使用gzdeflate()、gzcompress()、compress.zlib:// 流等,但找不到正确的等价物。
编辑:
应该注意,这个问题的用例是用于 TCP 连接的持久 Zlib 流,不是用于简单的网页压缩。换句话说,对 deflate 的连续调用应该使用 same Zlib 流。 PHP 当前允许这样做,但没有提供手动刷新的方法(例如SYNC_FLUSH),并且将等待刷新直到流关闭。这对于我的用例来说是不可接受的,因为我需要能够在任何给定点刷新以将压缩数据发送到该点到远程客户端。
编辑#2:
另请参阅this previous question,以更深入地分析为什么 PHP 不允许 SYNC_FLUSH。我正在寻找一个 hack 或解决方法,直到 PHP 最终被修补以解决它(不幸的是,如果它 修补,它可能会在 5.4 分支中,我不会能够使用很长时间,因此解决方法变得更加重要)。
【问题讨论】: