PHP解码采用Gzip+Chunked传输

http://blog.buylit.com/?p=52

chunked_decode 把网页的 chunked 格式 换成一个整体的字串:

function chunked_decode($in)
{
    $out = '';
    while ($in != '') {
        $lf_pos = strpos ($in, "\012");
        if ($lf_pos === false) {  $out .= $in; break;  }
        $chunk_hex = trim (substr ($in, 0, $lf_pos));
        $sc_pos = strpos ($chunk_hex, ';');
        if ($sc_pos !== false) $chunk_hex = substr ($chunk_hex, 0, $sc_pos);
        if ($chunk_hex == ''){
            $out .= substr ($in, 0, $lf_pos);
            $in = substr ($in, $lf_pos + 1);
            continue;
        }
        $chunk_len = hexdec ($chunk_hex);
        if ($chunk_len){
            $out .= substr ($in, $lf_pos + 1, $chunk_len);
            $in = substr ($in, $lf_pos + 2 + $chunk_len);
        } else {
            $in = '';
        }
    }
    return $out;
}
gzdecode  函数,把 gzip 字串解码:
function gzdecode($data)
{
	$flags = ord (substr ($data, 3, 1));
	$headerlen = 10;
	$extralen = 0;
	$filenamelen = 0;
	if ($flags & 4){
		$extralen = unpack ('v', substr ($data, 10, 2));
		$extralen = $extralen [1];
		$headerlen += 2 + $extralen;
	}
	if ($flags & 8) // Filename
		$headerlen = strpos ($data, chr (0), $headerlen) + 1;
	if ($flags & 16) // Comment
		$headerlen = strpos ($data, chr (0), $headerlen) + 1;
	if ($flags & 2) // CRC at end of file
		$headerlen += 2;
	$unpacked = @gzinflate (substr ($data, $headerlen));
	if ($unpacked === FALSE) $unpacked = $data;
	return $unpacked;
}

curl  可以返回转换过的 chunked 的内容,但是不能 返回 gzip 解码内容; fsockopen 方式,得先 chunked_decode, 然后再 gzdecode



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值