PHP cURL yoluyla alınan Çöz gzip'li web sayfası

3 Cevap php

Ben kıvrılma yoluyla gzip'li web sayfası almak, ama olduğumda ben çıkış ben sadece ham gzip'li verileri almak tarayıcıya alınan içerik. PHP nasıl veri deşifre edebilir?

Buldum bir yöntem daha sonra tmp dosyası ve içeriği yazmak oldu ...

$f = gzopen($filename,"r");
$content = gzread($filename,250000);
gzclose($f);

.... Ama insan, daha iyi bir yolu olmalı var.

Edit: Bu bir dosya değil, bir web sunucusu tarafından döndürülen gzip'li html sayfası.

3 Cevap

Ben curl kullanımı ve:

curl_setopt($ch,CURLOPT_ENCODING , "gzip");

PHP page for gzdecode üzerine yorumlarda önerilen birçok çözüm vardır.

Çok yönlü gunzip fonksiyonu:

   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 ile işlevini entegre örneği:

      $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;