Decode gzipped web page retrieved via cURL in PHP

前端 未结 2 1149
庸人自扰
庸人自扰 2020-11-27 05:47

I\'m retrieving a gzipped web page via curl, but when I output the retrieved content to the browser I just get the raw gzipped data. How can I decode the data in PHP?

<
相关标签:
2条回答
  • 2020-11-27 06:10

    I use curl and:

    curl_setopt($ch,CURLOPT_ENCODING , "gzip");
    
    0 讨论(0)
  • 2020-11-27 06:14

    Versatile GUNZIP function:

       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";
       }  
    

    Example of integrating function with 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;
    
    0 讨论(0)
提交回复
热议问题