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.
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
|
如果是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库使用方法打开连接