2017-11-05php 使用curl获取远程数据

您现在的位置是: 首页 > PHP技术 > php 使用curl获取远程数据

360次阅读

在php中,如果不仔细的去分析性能会发现file_get_contents与curl两个都有很多共同点的,他们都可以采集文件打开文件,但是如果仔细一对比会发现很多不同点,如果对比两者,我比较倾向于使用curl来访问远程url。

PHP中fopen,file_get_contents,curl函数的区别:

1. fopen / file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比fopen / file_get_contents 好很多。

2. fopen / file_get_contents 在请求HTTP时,使用的是http_fopen_wrapper,不会keeplive。而curl却可以。这样在多次请求多个链接时,curl效率会好一些。

3. fopen / file_get_contents 函数会受到php.ini文件中allow_url_open选项配置的影响。如果该配置关闭了,则该函数也就失效了。而curl不受该配置的影响。 

4. curl 可以模拟多种请求,例如:POST数据,表单提交等,用户可以按照自己的需求来定制请求。而fopen / file_get_contents只能使用get方式获取数据。file_get_contents 获取远程文件时会把结果都存在一个字符串中 fiels函数则会储存成数组形式。

/**\r * 使用curl获取远程数据\r * @param  string $url url连接路径\r * @return string      获取到的数据\r */\rfunction curl_get_contents($url){\r    $ch=curl_init();\r    curl_setopt($ch, CURLOPT_URL, $url);                //设置访问的url地址\r    // curl_setopt($ch,CURLOPT_HEADER,1);               //是否显示头部信息\r    curl_setopt($ch, CURLOPT_TIMEOUT, 5);               //设置超时\r    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER[\'HTTP_USER_AGENT\']);   //用户访问代理 User-Agent\r    curl_setopt($ch, CURLOPT_REFERER,$_SERVER[\'HTTP_HOST\']);        //设置 referer\r    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);          //跟踪301\r    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        //返回结果\r\r    //这个是重点,加上这个便可以支持http和https下载\r    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\r\r    $r=curl_exec($ch);\r    curl_close($ch);\r    return $r;\r}


示例:

$url = "https://www.52linmin.wang/";\r$res = curl_get_contents($url);\r\recho \'<pre>\';\rvar_dump($res);

360截图1625112699101118.jpg