解码通过cURL在PHP中检索的gzip网页
我正在通过curl检索一个gzipped网页,但是当我将检索到的内容输出到浏览器时,我只是得到了原始gzip的数据。 我如何解码PHP中的数据?
我发现的一种方法是将内容写入一个tmp文件,然后…
$f = gzopen($filename,"r"); $content = gzread($filename,250000); gzclose($f);
但是,男人应该有更好的办法。
编辑:这不是一个文件,而是一个网页服务器返回的gzipped html页面。
我使用curl和:
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
在PHP页面的gzdecode的评论中提出了几个解决scheme。
多function的GUNZIPfunction:
函数gunzip($ zip){ $ offset = 0; if(substr($ zip,0,2)==“\ x1f \ x8b”) $ offset = 2; if(substr($ zip,$ offset,1)==“\ x08”){ #file_put_contents(“tmp.gz”,substr($ zip,$ offset - 2)); 返回gzinflate(substr($ zip,$ offset + 8)); } 返回“未知格式”; }
集成CURLfunction的示例:
$ headers_enabled = 1; curl_setopt($ c,CURLOPT_HEADER,$ headers_enabled) $ ret = curl_exec($ c); 如果($ headers_enabled){ #file_put_contents(“preungzip.html”,$ ret); $ sections = explode(“\ x0d \ x0a \ x0d \ x0a”,$ ret,2); while(!strncmp($ sections [1],'HTTP /',5)){ $ sections = explode(“\ x0d \ x0a \ x0d \ x0a”,$ sections [1],2); } $ headers = $ sections [0]; $ data = $ sections [1]; 如果(preg_match('/ ^ Content-Encoding:gzip / mi',$ headers)){ printf(“findgzip头文件\ n”); 返回gunzip($ data); } } 返回$ ret;