Question

Quelqu'un sait comment décompresser le contenu d'un fichier gzip que je suis arrivé avec boucle?

par exemple: http://torcache.com/torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent

répondu

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

puis gzip compressé,

J'ai essayé gzdecode mais ne fonctionne pas, gzeflate aussi bien ne pas tout simplement ils ne reçoivent pas de réponse, et le contenu des fichiers ne sont pas plus que 2k

Était-ce utile?

La solution

Utilisez gzdecode :

<?php
    $c = file_get_contents("http://torcache.com/" .
        "torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
    echo gzdecode($c);

donne

d8:announce42:http://tracker.openbittorrent.com/announce13:announce-listll42
...

Autres conseils

Il suffit de dire cURL pour décoder la réponse automatiquement à chaque fois qu'il est gzip

curl_setopt($ch,CURLOPT_ENCODING, '');

libcurl offre une fonctionnalité qui permet de décompresser le contenu automatiquement (si elle est construite avec zlib).

Voir l'option CURLOPT_ENCODING: http://curl.haxx.se/libcurl /c/curl_easy_setopt.html#CURLOPTENCODING

Avez-vous essayé de placer l'en-tête indiquant que vous acceptez l'encodage gzip comme suit:

curl_setopt($rCurl, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));

zlib flux Wrapper:

file_get_contents("compress.zlib://http://torcache.com/" .
    "torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");

Avez-vous essayé gzuncompress ou gzinflate ?

gzdeflate compresse , à l'opposé de ce que vous voulez. Pour être honnête, je ne peux pas comprendre comment gzdecode diffère de la normale décompression.

Il y a aussi l'option cURL CURLOPT_ENCODING :

  

Le contenu du "Accept-Encoding:" En-tête. Ceci permet le décodage de la réponse. encodages sont pris en charge « l'identité », « dégonfler » et « gzip ». Si une chaîne vide, « », est défini, est envoyé un en-tête contenant tous les types d'encodage pris en charge.

Il semble signifier qu'il va automatiquement décomprimer la réponse, mais je n'ai pas testé cela.

Vous pouvez le faire avec gzinflate (prétendant que les en-têtes $ contient tous vos en-têtes HTTP, et le tampon de $ contient vos données):

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;
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top