Curlを使用してgzip圧縮されたWebページを取得していますが、取得したコンテンツをブラウザーに出力すると、gzip圧縮された生データが取得されます。 PHPでデータをデコードするにはどうすればよいですか?
私が見つけた1つの方法は、コンテンツをtmpファイルに書き込んでから...
$f = gzopen($filename,"r");
$content = gzread($filename,250000);
gzclose($f);
....しかし、男、より良い方法があるはずです。
編集:これはファイルではなく、Webサーバーから返されるgzip圧縮されたHTMLページです。
Curlを使用して:
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
gzdecodeのPHPページ のコメントにいくつかの解決策が提案されています。
汎用性のあるGUNZIP機能:
function gunzip($ zipped){ $ offset = 0; if(substr($ zipped、0,2)== "\ x1f\x8b") $ offset = 2; if(substr($ zipped、$ offset、1)== "\ x08"){ #file_put_contents( "tmp.gz"、substr($ zipped 、$ offset-2)); return gzinflate(substr($ zipped、$ offset + 8)); } return "Unknown Format"; }
関数をCURLと統合する例:
$ headers_enabled = 1; curl_setopt($ c、CURLOPT_HEADER、$ headers_enabled) $ ret = curl_exec($ c); if ($ 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]; if(preg_match( '/ ^ Content-Encoding:gzip/mi'、$ headers)){ printf( "gzip header found\n"); return gunzip($ data); } } return $ ret;