您的位置:首页 > 编程语言 > PHP开发

PHP使用curl替代file_get_contents

2016-08-17 18:06 537 查看
http://www.ttlsa.com/php/curl-replace-ile_get_contents/

初学php的朋友们,很容易翻一个错误,在写采集程序或者调用api接口总会有线考虑到使用file_get_contents函数来或许内容,程序的访问量不大倒是没什么影响,但是访问量提升了那非常的悲剧了,你会发现服务器负载飙升,最后服务器宕机.初入公司便遇到这个问题,遂使用curl取代此命令,并且禁用远程file_get_contents,它支持很多协议:FTP,
FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP.

<?php
$url='http://www.baidu.com';

$ch = curl_init();

$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);

echo $file_contents;

//function_exists()替换

if(function_exists('file_get_contents')) {
$file_contents = file_get_contents($url);
} else {
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
}
return $file_contents;
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

<?php

$url='http://www.baidu.com';
 

$ch =
curl_init();
 

$timeout =
5;
curl_setopt
($ch,
CURLOPT_URL,
$url);

curl_setopt ($ch,
CURLOPT_RETURNTRANSFER,
1);
curl_setopt
($ch,
CURLOPT_CONNECTTIMEOUT,
$timeout);

$file_contents =
curl_exec($ch);
curl_close($ch);

 
echo
$file_contents;

 
//function_exists()替换

 
if(function_exists('file_get_contents'))
{

$file_contents =
file_get_contents($url);
}
else {

$ch =
curl_init();
$timeout
= 5;

curl_setopt ($ch,
CURLOPT_URL,
$url);
curl_setopt
($ch,
CURLOPT_RETURNTRANSFER,
1);

curl_setopt ($ch,
CURLOPT_CONNECTTIMEOUT,
$timeout);
$file_contents
= curl_exec($ch);

curl_close($ch);
}

return $file_contents;
?>

禁用file_get_contents方法:

打开php.ini,配置如下:

allow_url_fopen = On
改为
allow_url_fopen = Off

1
2
3

allow_url_fopen
= On

改为
allow_url_fopen
= Off

如果是fastcgi重启php-fpm,如果是apache+php那直接重启apache即可.

file_get_contents与curl对比结果.




curl替代file_get_contents

福建省福州市file_get_contents:0.4679060000 seconds

福建省福州市curl:0.3150200000 seconds

这边分别使用file_get_contents与curl使用淘宝ip库来获取IP地址信息,可以发现file_get_contents和curl性能的差距还是比较大.file_get_contents耗时0.467秒,curl使用0.315秒.差了0.152秒,有30%性能差距. 淘宝IP库使用方法打开连接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: