PHP上でCURLからgzipファイルを解凍します。
質問
誰かcurlで取得したgzipファイルの内容を解凍する方法を知っていますか?
例えば: http://torcache.com/torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent
答えた
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 09 Jun 2010 01:11:26 GMT
Content-Type: application/x-bittorrent
Content-Length: 52712
Last-Modified: Tue, 08 Jun 2010 15:09:58 GMT
Connection: keep-alive
Expires: Fri, 09 Jul 2010 01:11:26 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip
Accept-Ranges: bytes
次に圧縮された gzip、
gzdecodeを試してみましたが機能しません、gzeflateも単に応答が得られません、そしてファイルの内容は2kを超えません
解決
使用 gzdecode
するます:
<?php
$c = file_get_contents("http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
echo gzdecode($c);
タグ提供します
d8:announce42:http://tracker.openbittorrent.com/announce13:announce-listll42 ...
他のヒント
ただ、それはgzip圧縮された
だたびに自動的に応答をデコードするためのcURLを伝えますcurl_setopt($ch,CURLOPT_ENCODING, '');
のlibcurl(zlibので構築されている場合)、それは自動的に内容を解凍作る機能を提供しています。
http://curl.haxx.se/libcurl:CURLOPT_ENCODINGオプションを参照してください。 /c/curl_easy_setopt.html#CURLOPTENCODINGする
は次のようにあなたがGZIPエンコーディングを受け入れることを示すヘッダを設定しようとしたことがあり
curl_setopt($rCurl, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));
file_get_contents("compress.zlib://http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
やってみました gzuncompress
または gzinflate
?
gzdeflate
圧縮する, 、あなたが望んでいることの反対。正直に言うと、やり方が分かりません gzdecode
通常の解凍とは異なります。
cURL オプションもあります CURLOPT_ENCODING
:
「Accept-Encoding:」の内容「ヘッダー。 これにより、応答のデコードが可能になります。 サポートされているエンコードは、「identity」、「deflate」、および「gzip」です。空の文字列「」が設定されている場合、サポートされているすべてのエンコード タイプを含むヘッダーが送信されます。
応答を自動的に解凍することを意味しているようですが、それをテストしていません。
あなたは($ヘッダは、すべてのHTTPヘッダが含まれていること、そして、あなたのデータが含まれています$バッファふり)gzinflateでそれを行うことができます:
if (isset($headers['Content-Encoding']) && ($headers['Content-Encoding'] === 'gzip' || $headers['Content-Encoding'] === 'deflate'))
{
if ($headers['Content-Encoding'] === 'gzip')
{
$buffer = substr($buffer, 10);
}
$contents = @gzinflate($buffer);
if ($contents === false)
{
return false;
}
}