file_get_contents 小结
首先,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。
- 上一篇: 慎用preg_replace危险的/e修饰符
- 下一篇: thinkphp表单js过滤