入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

file_get_contents 小结

创建时间:2014-12-19 投稿人: 浏览次数:755

首先,file_get_contents 应当在php.ini中开启allow_url_fopent


今天在调取一家网站的页面信息时候,使用file_get_contents抑或curl

$url = "http://cd.xxx.com/";
$arr = file_get_contents($url);
echo $arr;

这时得到了一片乱码,查看了许多内容,包括页面的header信息,发现该站点开启了gzip压缩。这里的解决方案有多种,当然如果你使用file_get_contents的话,可以这样修改,

file_get_contents("compress.zlib://".$url);

或者使用curl来完成:

function curl_get($url, $gzip=false){  
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);  
    if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里  
    $content = curl_exec($curl);  
    curl_close($curl);  
    return $content;  
} 

同时,参考手册上面的解法,还可以对保存gzip类型的字符串进行处理如下:

function gzdecode($data){  
    $g=tempnam(‘/tmp’,"ff’);  
    @file_put_contents($g,$data);  
    ob_start();  
    readgzfile($g);  
    $d=ob_get_clean();  
    return $d;  
}

file_get_contents()模拟referer,cookie, 使用proxy等等,如下:
ini_set("default_socket_timeout",120);
ini_set("user_agent","MSIE 6.0;");
$context=array("http" => array ("header"=> "Referer: http://www.baidu.com/", ),);
$xcontext = stream_context_create($context);
echo $str=file_get_contents("http://www.webkaka.com/",FALSE,$xcontext);

模拟post提交

function Post($url,$post = null){
    $context = array();
    if(is_array($post)){
        ksort($post);
        $context["http"] = array(
            "timeout" => 60,
            "method" => "POST",
            "context" => http_build_query($post, "", "&")
        );
    }
    return file_get_contents($url, false, stream_context_create($context));
}


$data = array
(
     "name" => "test",
     "email" => "test@gmail.com",
     "submit" => "submit",
);

echo Post($url, $data);



声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。