ホームページ  >  記事  >  バックエンド開発  >  チャンクエンコーディングに関する問題

チャンクエンコーディングに関する問題

WBOY
WBOYオリジナル
2016-06-13 12:12:02978ブラウズ

チャンクエンコーディングの問題
PHP によって収集されたデータは、チャンク転送エンコーディングです。gzip 圧縮形式でのチャンクエンコーディングの考え方は次のとおりです。
各チャンクはヘッダーとチャンクに分割されます。ヘッダー ヘッダーには本文の長さが含まれており、ヘッダーと本文は改行と改行で区切られ、ブロックの終わりを示す 1 行で終わります。 。 。
応答ヘッダー情報:


<br /><br />Array<br />(<br />    [0] => HTTP/1.1 200 OK<br /><br />    [1] => Server: Dict/34002<br /><br />    [2] => Date: Wed, 17 Dec 2014 06:49:22 GMT<br /><br />    [3] => Content-Type: text/html; charset=utf-8<br /><br />    [4] => Transfer-Encoding: chunked<br /><br />    [5] => Connection: keep-alive<br /><br />    [6] => Keep-Alive: timeout=60<br /><br />    [7] => Cache-Control: private<br /><br />    [8] => Last-Modified: Wed, 17 Dec 2014 04:57:49 GMT<br /><br />    [9] => Expires: Wed, 17 Dec 2014 06:49:22 GMT<br /><br />    [10] => Set-Cookie: uvid=VJEncoTSVYJC; expires=Thu, 31-Dec-37 23:55:55 GMT; domain=.dict.cn; path=/<br /><br />    [11] => Content-Encoding: gzip<br /><br />)<br /><br />


<br /><br />if($this->response_num==200)<br />        {<br />			if($this->is_chunked)<br />			{<br />				//读取chunk头部信息,获取chunk主体信息的长度<br />				$chunk_size = (int)hexdec(fgets($this->conn));<br />				//<br />				while(!feof($this->conn) && $chunk_size > 0) <br />				{ <br />					//读取chunk头部指定长度的信息<br />					$this->response_body .= fread( $this->conn, $chunk_size ); <br />					fseek($this->conn, 2, SEEK_CUR);<br />					$chunk_size = (int)hexdec(fgets( $this->conn,4096)); <br />			   } <br />			}<br />			else<br />			{<br />				$len=0;<br />				//读取请求返回的主体信息<br />				while($items = fread($this->conn, $this->response_body_length))<br />				{<br />					$len = $len+strlen($items);<br />					$this->response_body = $items;<br />					<br />					//当读取完请求的主体信息后跳出循环,不这样做,貌似会被阻塞!!!<br />					if($len >= $this->response_body_length)<br />					{<br />						break;<br />					}<br />				}<br />			}<br />			<br />            if($this->is_gzip)<br />            {<br />                $this->response_body = gzinflate(substr($this->response_body,10));<br />            }<br />			<br />			$this->getTrans($this->response_body);<br /><br />        }<br />

基本的に、このプロンプトは毎回表示されます:

警告: gzinflate(): data error in E:CodeEditphphttpdict.php on line 384チャンクデコードに問題があるはずですが、いくつかの情報を確認し、集中デコード方法を変更しました。まだ不十分でした

------解決策----------------------gzdecode を使用すると、デコード

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。