file_get_contents($ url)返回与源完全不同的内容

时间:2014-05-21 19:48:47

标签: php

我想要做的是获取网页并从中获取一些信息。代码工作正常一段时间,但现在返回无法在浏览器中显示的内容。

$html = file_get_contents("http://thepiratebay.com/");
echo $html;

有一段时间,这段代码只反映了我要求的网页,但现在我得到以下内容:

‹½[{sÛ¸ÿ;ù°f®¶ç,ÊzØIlI7–±ÇQcçÕ›+"!EÐ(EIóÝ»H ©¯SöæbìþvÅbABÝ‹wç_†—È3¿ÿ¼+ÈÇÁ¤W#AMvûÏüבãáˆÑ«Åb\YKš>é_°Eà3ì¢YÌ©s€flN ?@<“ÎÆb#²ƒ<‚†4‚ ^¢º"L°¿.w9°q"©OI ЀŠE²È© ݆3t @~¯æîD4”5ä°@G¯VR'„ÙÅñ CD¬M )G¢¼ŠV-¯Ý”,,r¹¡Ú,l <§hD…Ðüh³ÀW:'&$ªã0ô©ƒ¥½ºÝÄÚ‡úÉa¾Èš²Îi†'Q2U¡@Ñ cŸÔ¥õ9‰è8Á0]¾ÿBØìæüˆ>ùÃÛ8¿¿¼>{õz~öáÍ·«k¯ýéfÑê|s ÄN½þ;#_ ›KôêMU-> ¦0˜~¯ÆÅÒ'Ü# ò"2îÕ\ºÓp8¯dÑ Ä‚bÍàÖ“Žxä¬z?ò†tä#{Ì"X£ÛÐ=Su~'KÇÔë á¯h1Ã40ô0y Ž¯†Ä2„±4¦¨ÁBèVÃQý:ó3UK‘•Ÿ÷j÷Š´á‘ydìЬåek8•. 1ž ìË»’ü|žççsûþ²$0Êó#ûî]Yþýƒ <¿‹óü.¶/Þ”äÓ<ÿ˜ÚW7%ù)ÏóSnßÜ—µß/°ß·ïnËÚO ì'öEÙù£¢@aß<”õ¿û ·/ËÚà‡Â–ÅßÂ?x_vþ£‚ù쫲üaÁü…¾=,;^œç÷bûúCÙñ/À'¾ýº¬þ¢À~Ùeù£ý£Ø~_V>-ˆ?Sû¾ìúu Ö¿ƒËûŸW°~|DÜc‹ŠðŽsx×8p=â»Õà½Èã]Tì¬/‹!«×W9ÐöE%H¯òH•Å²¶¹¹ïϪÁjb}ŸhàV4qms³]G}‹+ÙÞÛæ^»Žøáîæs5mU.þ¶Ü6oÞÝ£=:Änƒ=ýjð·áŸnÄh5V>ÉÆ:ªZ§èÝÏOÓÿ%lÇXª¯åïj@šëÔ°’”­c¬Ë©¢Ù1dfÔý×j :9¨ÏƒwŸÛLJÕÀåà>QZ ÔqªÊØÒ1‹ïÿT:Fz‘WM:F4Iá*ÛîŒ2dQP Fs £Ò\ðȈ"k•[ŽŒ’ ©#â¨*;›p•ÿ##š$X§òGFP1§¯ºóØ‘±ÜÄÊVÛ±±Ú*i®ƒ€E—õÊ^$.…;g3êT„ÖΡU¹ÚŽÕ¶²nN¢ŠÐŽòÖyKNG~EæΟ¦Žù¼ÛÐW[º#æ.ááÒ9¢n¯6SU¼f¿‹S€µ—Ë›ßâ»<ÄAÚm(b·áˆÒ2¬Qà)-]¿É "Lúé÷þäúÈÑtôïUוZœ#Éê­·ªf¼µþAjS('"´grÞ«ª!gƒ°UŽ˜¯){=‘–4* S7 [2ÎäM'zlGbáŠ...H¾7ï “É¤Ç»C,S%(重量)\žjhF“C "&òv¤SÉ{ sBB5U4 ¢jR,V²´{fW?’h«=á>¡†>vˆÇ|—D¹66fNÌÁñŸbwOyÒi},8‚¾:™räÂ2*ÙÀËI¿ÑdrnHÉŠJƳg]:ŽôÅOð¤ÑX,OI”áØrجúñ“¼áÓ)±B /üMÉÞ¿'Ï〜I] AY <öoxžúxÉbÑÅB°ÀvXE-^dKÞQ¬ û&amp;s'TÝa&gt; <¸ã〜ŸN&lt;ÅYCêRO¯¶®ðNÀE¯§'Í'-Y†NÄ| X“òÖ«!eÜEj¾_þÏ。äX.åÇñ〜È{EzÔ〜¤# )-ä0bAD15ê&amp;V¶zÌ90ë-º¢¥5äbëqäg#º1:IA¾~:u'ð(G!ÌŒe%ÍæžÀ@Éxai,éÜ%W¡vÆq†oÏ=àÔÝÿ&gt;ÇzäãGÞs-X-&gt;Œ# ,øÁòOîÀÌ=¾ÿûáa¯ñ/¢​​%{®å3š÷Û•»'êÁwOéxoÇ“5XÞ¸{€μÿ] 8”6~úÈ-XvÔ•é\᯻0°〜“\Á-9¤0> - [* [jjÄs‰^ G“1ÀCö'Eû§?〜<<¹°Îfê~Ý®”](¥“±Aû§ëAÅÅUÒX_...ÝF〜Ž7Ú&gt;ßüdÁü-O x÷ѱDrcÙÊÈ©'ºïíŸ|ñ\Ú ™ŽØWp!Y,í݆ø)¬úh&gt; e°:“aÝCé<™Ñl<}%¶¼dd/6à纇”OŠ%à•Ø2Ö> oyM-Èæ“ë1P¥2C È.¡Š>Ș:D:Lt©DR,¡…[^€Mt±ª\—J K™% !uÒeb/ 7°™I A“BT%6_'0y&LT; SOAE íTlÛ»çØóTÃþdßìÎÐr§A·±3] O” DU%EWU“G] W ^ ^õLæQíà‰œÃò!|j³T€ì¹T» †“²NMÕÃÖìú5#cöˆ¿ÊЮٹÝd7”«õó4,'ù.dè“ÃcÌçU ;˜‘²0H0VùŠªõÕ#ÉŸ™Iî„r!+KsB?-å™r9Ñ=ñ‰#PFÏ2#Ô@myix‰ÍêuºªõÕ£™Lðêð­¬Áf/·K™Ž™Õ‹]È®Òâ6…yF†®ZÀ‹â™¡ùgZë+ò6AIJ§Îu:Ú[úÈåŦ̵nÙrÛâ *¨>¦0"–üÑ@æW q;TÚc ¥È*OgiŽ)ýf6ÉËÖô­Ãƒ¹N–ME‡’(Oê9aiË6q°ÃˆyN\ľɒäLÐN½ŽrÒŒÜU„#— pÃä=°ù¡Ý·È; º%Gkùk†ü)$w,{ðHâxù Go±ãÑ€lQä*áü3MÒ~…‡ïôíŠü!…Ü-­ãæ!üë 4("‰8º…)Aq' µš'ÓÃcK;æQÇj½8´_¡ÈÎ{¦uÜnZ/:Ä q%íWÔlñ¥Õn7‘O$ßG4@ÇV«ýÂj5_e?®IäjuÕv³¦.uôåÝ+ç´T8Œ–žD3üôTœ3½ îhÅšðœ4ßï\þñmê^Ÿ·XÜž„Ë××OÎíüæÛâaËŸ÷Ñ&ˆ/Ôϧ‚lSðÚ SΔåä–~ Û“fóîh0ùøòéͧN+ÝÿóóÕìñb°|d¥Œ?ë£ôÓº©¿ÏÌݘ¯"éûûûìdÌC$›’—jÐb¾IKÂSá~ ã¤\s›Â½IšWˆ CªÛ Ü熃ÈH'$é1úù3:F{‚…h§^è÷Á¿ÂìDlIMQ­ÕOŸ?Kß(=ê}ÃtLϨ–Ì´¸õd‘ä~*;XêŒf%‡ÀÞûœèuz*j'š"º:d5¨<×ðÃÐ9ÉÊ¿oWÖ‚óì†ôãùêp ~«ß¼6ôoÿ,ˆŸOŒ8

我不明白。

3 个答案:

答案 0 :(得分:2)

这是因为GZIP压缩已启用。您需要使用CURL或定义http上下文,因此它将发送accept-encoding: gzip;q=0,deflate,sdch标题...

会是这样的:

$opts = array(
   'http'=>array(
      'method'=>"GET",
      'header'=>"Accept-Encoding: gzip;q=0,deflate,sdch\r\n"
   )
);
$context = stream_context_create($opts);
$result = file_get_contents('http://www.thepiradebay.com', false, $context);

答案 1 :(得分:1)

您可以使用curl正确获取数据.curl比file_get_contents()快得多

getContents返回获取的数据。

function getContent($url)
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => false,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => "",
        CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0",
        CURLOPT_AUTOREFERER => true,
        CURLOPT_CONNECTTIMEOUT => 120,
        CURLOPT_TIMEOUT => 120,
        CURLOPT_MAXREDIRS => 10);
    $ch = curl_init($url);
    curl_setopt_array($ch, $options);
    $result= curl_exec($ch);
    curl_close($ch);
    return $result;
}

答案 2 :(得分:1)

试试这个:

function get_url($url) {
    $opts = array(
        'http'=>array(
            'method'=>"GET",
            'header'=>"Accept-Language: en-US,en;q=0.8rn" .
                        "Accept-Encoding: gzip,deflate,sdchrn" .
                        "Accept-Charset:UTF-8,*;q=0.5rn" .
                        "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.4rn"
        )
    );

    $context = stream_context_create($opts);
    $content = file_get_contents($url ,false,$context);

    foreach($http_response_header as $c => $h){
        if(stristr($h, 'content-encoding') and stristr($h, 'gzip')){
            $content = gzinflate( substr($content,10,-8) );
        }
    }

    return $content;
}

echo get_url('http://www.thepiratebay.com/');