PHP 化解nginx 用file_get_content 难点

作者:ca88编程
$my_curl = curl_init();    //初始化一个curl对象  curl_setopt($my_curl, CURLOPT_URL, "http://www.webjoy.net");  //设置你需要抓取的URL  curl_setopt($my_curl,CURLOPT_RETURNTRANSFER,1);  //设置是将结果保存到字符串中还是输出到屏幕上,1表示将结果保存到字符串  $str = curl_exec($curl);    //执行请求  echo $str;  //输出抓取的结果  curl_close($curl);  //关闭url请求  // 封装  function curl_file_get_contents($url){      $ch = curl_init();      curl_setopt($ch, CURLOPT_URL, $url);      curl_setopt($ch, CURLOPT_TIMEOUT, 5);      curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);      curl_setopt($ch, CURLOPT_REFERER,_REFERER_);      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);      $r = curl_exec($ch);      curl_close($ch);      return $r;  }


<?php
function HTTP_Post($URL,$data,$cookie, $referrer="")
{
// parsing the given URL
$URL_Info=parse_url($URL);

抓取远程内容,以前从来都在用file_get_content函数,其实已经通晓有curl这么二个好东西的留存,然而看了一眼后认为到使用颇有个别复杂,未有file_get_content那么粗略,再不怕必要也不大,所以未有读书使用curl。
甚至近期,要做三个网页小偷程序的时候才察觉file_get_content已经完全不可能满足需要了。笔者觉着,在读取远程内容的时候,file_get_content除了行使比curl便捷以外,其余都尚未curl好。

抓取远程内容,在此之前向来都在用file_get_content函数,其实早就知道有curl这么八个好东西的存在,然则看了一眼后感到使用颇有个别复杂,没有file_get_content那么简单,再不怕须要也比比较小,所以并未有上学生运动用curl。
结束最近,要做多个网页小偷程序的时候才意识file_get_content已经完全不能满意需要了。小编以为,在读取远程内容的时候,file_get_content除了运用比curl便捷以外,其余都未曾curl好。

1、用file_get_contents 以get方式赢得内容:

 

php中curl和file_get_content的有的相比较

php中curl和file_get_content的片段比较

 代码如下

// Building referrer
if($referrer=="") // if not given use this script as referrer
$referrer="111″;

第一差距:

重大差别:

<?php
$url='';
$html = file_get_contents($url);
echo $html;
?>

// making string from $data
foreach($data as $key=>$value)
$values[]="$key=".urlencode($value);
$data_string=implode("&",$values);

学习才察觉,curl支持广大商议,有FTP, FTPS, HTTP, HTTPS, GOPHELAND, TELNET, DICT, FILE以及LDAP,也便是说,它能成就多数file_get_content做不到的作业。curl在php能够兑现长途获取和采访内容;落成PHP网页版的FTP上传下载;实现模拟登录;达成接口对接(API),数据传输;达成模拟Cookie;下载文件断点续传等等,作用十二分有力。

学学才意识,curl补助广大商讨,有FTP, FTPS, HTTP, HTTPS, GOPHE大切诺基, TELNET, DICT, FILE以及LDAP,也正是说,它能不负众望大多file_get_content做不到的业务。curl在php能够达成远程获取和采访内容;完毕PHP网页版的FTP上传下载;达成模拟登录;完成接口对接(API),数据传输;达成模拟库克ie;下载文件断点续传等等,作用特别强有力。

2、用fopen开采url,用get格局获取

// Find out which port is needed – if not given use standard (=80)
if(!isset($URL_Info["port"]))
$URL_Info["port"]=80;

刺探curl一些骨干的运用后,才发觉其实并简单,只可是记住里面有些装置参数,难弄一点,不过大家铭记多少个常用的就足以了。

叩问curl一些核心的施用后,才察觉实际并轻巧,只可是记住里面有些设置参数,难弄一点,然而大家记住多少个常用的就可以了。

 代码如下

// building POST-request:
$request.="POST ".$URL_Info["path"]ca88编程,." HTTP/1.1n";
$request.="Host: ".$URL_Info["host"]."n";
$request.="Referer: $referern";
$request.="Content-type: application/x-www-form-urlencodedn";
$request.="Content-length: ".strlen($data_string)."n";
$request.="Connection: closen";

开启curl:

开启curl:

$fp = fopen($url, 'r');
stream_get_meta_data($fp);
while(!feof($fp)) {
$result .= fgets($fp, 1024);
}
echo "url body: $result";
fclose($fp);

$request.="Cookie: $cookien";

因为PHP默许是不协助curl功能的,因而要是要用curl的话,首先供给在php.ini中拉开该意义,即去掉 ;extension= php_curl.dll 前边的子公司,然后保留后重启apache/iis就好了。

因为PHP暗中认可是不支持curl功效的,因而要是要用curl的话,首先要求在php.ini中拉开该意义,即去掉 ;extension= php_curl.dll 后边的分部,然后保留后重启apache/iis就好了。

3、用file_get_contents 以post格局获取内容:

$request.="n";
$request.=$data_string."n";

骨干语法:

着力语法:

 代码如下

$fp = fsockopen($URL_Info["host"],$URL_Info["port"]);
fputs($fp, $request);
while(!feof($fp)) {
$result .= fgets($fp, 1024);
}
fclose($fp);

复制代码 代码如下:

复制代码 代码如下:

$data = array ('foo' => 'bar');
$data = http_build_query($data);
 
$opts = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencodedrn" .
'Content-Length: ' . strlen($data) . 'rn',
'content' => $data
)
);
 
$context = stream_context_create($opts);
$html = file_get_contents('', false, $context);
 
echo $html;

return $result;
}
?>

$my_curl = curl_init();    //早先化八个curl对象
curl_setopt($my_curl, CURLOPT_ULANDL, "//www.jb51.net");    //设置你须要抓取的U智跑L
curl_setopt($my_curl,CURLOPT_RETU冠道NTRANSFEPAJERO,1);    //设置是将结果保存到字符串中依然出口到荧屏上,1意味着将结果保存到字符串
$str = curl_exec($curl);    //实施请求
echo $str;    //输出抓取的结果
curl_close($curl);    //关闭url请求

$my_curl = curl_init();    //伊始化一个curl对象
curl_setopt($my_curl, CURLOPT_UKoleosL, "//www.jb51.net");    //设置你须要抓取的U昂CoraL
curl_setopt($my_curl,CURLOPT_RETU途睿欧NTRANSFELacrosse,1);    //设置是将结果保存到字符串中照旧出口到显示器上,1意味将结果保存到字符串
$str = curl_exec($curl);    //实践请求
echo $str;    //输出抓取的结果
curl_close($curl);    //关闭url请求


4、用fsockopen函数展开url,以get形式获取完整的数据,包涵header和body,fsockopen需求PHP.ini 中 allow_url_fopen 选项开启

 

不久前要求获得外人网址上的音乐数据。用了file_get_contents函数,可是接连会遇见获取退步的主题材料,即便根据手册中的例子设置了晚点,可超过四分之二时候不会收效:

不久前急需获得别人网址上的音乐数据。用了file_get_contents函数,但是接连会境遇获取失败的主题材料,就算依据手册中的例子设置了晚点,可超过一半时候不会收效:

 代码如下

php中 curl, fsockopen ,file_get_contents 多个函数 都能够完成搜集模拟发言 。三者有何样分别,大概讲究么

$config['context'] = stream_context_create(array('http' => array('method' => "GET",
'timeout' => 5//那个超时时间不平稳,通常不奏效
)
));

$config['context'] = stream_context_create(array('http' => array('method' => "GET",
'timeout' => 5//这几个超时时间不安定,平常不奏效
)
));

function get_url ($url,$cookie=false)
{
$url = parse_url($url);
$query = $url[path].'?'.$url[query];
echo 'Query:'.$query;
$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
if (!$fp) {
return false;
} else {
$request = 'GET $query HTTP/1.1rn';
$request .= 'Host: $url[host]rn';
$request .= 'Connection: Closern';
if($cookie) $request.='Cookie:  $cookien';
$request.='rn';
fwrite($fp,$request);
while(!@feof($fp)) {
$result .= @fgets($fp, 1024);
}
fclose($fp);
return $result;
}
}
//获取url的html部分,去掉header
function GetUrlHTML($url,$cookie=false)
{
$rowdata = get_url($url,$cookie);
if($rowdata)
{
$body= stristr($rowdata,'rnrn');
$body=substr($body,4,strlen($body));
return $body;
}
 
return false;
}

赵永斌:
稍微时候用file_get_contents()调用外部文件,轻松超时报错。换到curl后就能够.具体原因不知晓
curl 效率比file_get_contents()和fsockopen()高一些,原因是CULX570L会自动对DNS音信实行缓存(亮点啊有自家待亲测)

那儿,看一下服务器的连接池,会意识一群类似的失实,让本身头痛这几个:
file_get_contents(): failed to open stream…

此刻,看一下服务器的连接池,会发掘一群类似的一无可取,让自个儿喉咙痛那二个:
file_get_contents(): failed to open stream…

5、用fsockopen函数展开url,以POST方式获取完整的数额,包罗header和body

范佳鹏:
file_get_contents curl fsockopen
在日前所请求景况下选用性操作,未有同仁一视:
具大家集团支付KBI应用来看:
刚初阶运用:file_get_contents
新生使用:fsockopen
最后到到现在选取:curl

近来改用了curl库,写了七个函数替换:
function curl_file_get_contents($durl){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $durl);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}

现行反革命改用了curl库,写了贰个函数替换:
function curl_file_get_contents($durl){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $durl);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}

 代码如下

本文由ca88发布,转载请注明来源

关键词: ca88网址