frankwng1985 发表于 2013-8-7 20:18:01

PHP函数file_get_contents的问题

PHP函数file_get_contents的函数如何设置设置网络连接超时?

月光飞燕 发表于 2013-8-7 20:55:20

file_get_contents默认超时时间(秒)
php.ini中的default_socket_timeout设置,默认超时时间是default_socket_timeout = 60

如果要修改超时时间,修改第3个参数即可

$opts = array(
'http'=>array(
    'method'=>"GET",
    'timeout'=>120,
   )
);

$context = stream_context_create($opts);

$html =file_get_contents('http://www.example.com', false, $context);

adver 发表于 2013-8-7 20:57:09

月光飞燕 发表于 2013-8-7 20:55 static/image/common/back.gif
file_get_contents默认超时时间(秒)
php.ini中的default_socket_timeout设置,默认超时时间是default_soc ...

直接set_time_limit(0);不是更方便吗

月光飞燕 发表于 2013-8-7 21:23:34

adver 发表于 2013-8-7 20:57 static/image/common/back.gif
直接set_time_limit(0);不是更方便吗

set_time_limit是当前页超时设置,与楼主说的没有关联

frankwng1985 发表于 2013-8-7 22:19:56

月光飞燕 发表于 2013-8-7 21:23 static/image/common/back.gif
set_time_limit是当前页超时设置,与楼主说的没有关联

如果用了default_socket_timeout,请求A页面超时,可以接下去请教B页面吗?不让程序停止。

月光飞燕 发表于 2013-8-7 22:56:21

default_socket_timeout仅仅控制了file_get_contents
如果这个超时,那么当前执行的file_get_contents返回false
程序是继续向下执行的

但是要看你本页的超时时间是否大于file_get_contents的超时
本页的超时时间使用set_time_limit进行设置,你可以设置成很大的值,比如0无限
但是避免长时间执行造成内存溢出,最终导致服务器崩溃,你应该要设置一个
set_time_limit有限的值,比如120,360

让一个php页面无限时运行是非常不好的,你应该使用cronjob间隔调用php页面进行采集
这样会非常稳定,不至于服务器崩溃

mulao 发表于 2013-8-7 23:03:39

你是要采集吧
建议不要用file_get_contents,有时候会造成cpu飙升
建议用curl库,不仅高效而且强大,
我一直用curl库

ralf07 发表于 2013-8-8 10:14:07

用curl比file_get_contents效率要高

mulao 发表于 2013-8-8 16:26:13




....我权限不能短消息

我一般采集都是用定时任务方式,比如每分钟采集两条三条,以免频率太高,被封。又可以不间断运行。
你如果想通过设置set_time_limit来延长php运行时间,是不现实的。比如我vps,我用crontab设置采集程序一分钟运行一次,第运行一次可以采集两三条,一天也能采集好几千条了

网络连接错误,获取内容为空,那就重试,你也可以让它采集下一条网址,跳过当前网址,做个判断就可以了啊


frankwng1985 发表于 2013-8-14 15:35:45

mulao 发表于 2013-8-8 16:26 static/image/common/back.gif
....我权限不能短消息

我一般采集都是用定时任务方式,比如每分钟采集两条三条,以免频率太高,被封。 ...

如果下个1分钟调用的时候程序还在运行,怎么处理?系统会自动处理?

mulao 发表于 2013-8-16 22:39:41

frankwng1985 发表于 2013-8-14 15:35 static/image/common/back.gif
如果下个1分钟调用的时候程序还在运行,怎么处理?系统会自动处理?
这个应该不会吧,curl库采集一页网址的内容,10s绝对绰绰有余,一分钟采集两次肯定没问题

之前用curl做过小偷程序,curl库的效率很高,负载要远低于file_get_contents,不会出现file_get_contents等待时间过长而造成cpu飙升情况。有一次我的小偷程序上1w的IP,vps负载都不过0.2,当然了,我也是做了缓存的

好吧,万一碰上比较极端的情况,上一分钟的进程时间拖得确实比较长,到了新的一分钟,旧的进程继续执行他的,新的进程有自动开始,http进程也才两个而已,两个进程不相互影响,系统负载也不高,能够轻松应付。
但是如果这种极端情况不停的累加,那就是主机本身的问题了

ps,平常不上QQ的……




页: [1]
查看完整版本: PHP函数file_get_contents的问题