我想用zlib解析PHP中的Git包文件。 (有关格式here和here)的详细信息。正如那些文章中提到的那样,问题是packfile中没有为压缩数据指定长度,这意味着你必须将它扔进zlib并使用zlib来确定数据的开始和停止位置。虽然zlib的本机C API提供了在达到压缩数据末尾时返回的Z_STREAM_END
常量,但PHP的zlib扩展不提供此类选项。 我唯一的选择似乎是一次向输入流添加一个字节并检查 编辑:PHP重置total_in
(zlib流struct
的一部分)是否为0,根据PHP和只要inflate()
返回Z_STREAM_END
,zlib源代码就会重置为零。total_in
值,而不是zlib。这在我在下面的回答中链接的拉取请求中已更改。
问题是,如何获得total_in
的值? PHP的inflate_init()
函数返回一个“上下文资源”,我仔细阅读源代码表示struct
zlib用于解压缩。
在纯PHP中,是否可以使用上下文资源从内部total_in
获取struct
的值?
感谢。
编辑:基本上,我希望能够在zlib.inflate上下文中使用stream_context_get_options(),但我不能,因为我得到Invalid stream/context parameter
。
答案 0 :(得分:0)
经过一番研究,结果如下(TL; DR:没有PHP补丁,这是不可能的。):
stream_context_get_params()
之类的内容暴露给用户空间(PHP代码)。但是,这与资源所代表的实际内容是分开的。