質問

誰か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'));

A zlibのストリームラッパーの場合:

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;
        }
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top