PHP函数file_get_contents的问题
PHP函数file_get_contents的函数如何设置设置网络连接超时?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);
月光飞燕 发表于 2013-8-7 20:55 static/image/common/back.gif
file_get_contents默认超时时间(秒)
php.ini中的default_socket_timeout设置,默认超时时间是default_soc ...
直接set_time_limit(0);不是更方便吗
adver 发表于 2013-8-7 20:57 static/image/common/back.gif
直接set_time_limit(0);不是更方便吗
set_time_limit是当前页超时设置,与楼主说的没有关联
月光飞燕 发表于 2013-8-7 21:23 static/image/common/back.gif
set_time_limit是当前页超时设置,与楼主说的没有关联
如果用了default_socket_timeout,请求A页面超时,可以接下去请教B页面吗?不让程序停止。
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页面进行采集
这样会非常稳定,不至于服务器崩溃
你是要采集吧
建议不要用file_get_contents,有时候会造成cpu飙升
建议用curl库,不仅高效而且强大,
我一直用curl库
用curl比file_get_contents效率要高
....我权限不能短消息
我一般采集都是用定时任务方式,比如每分钟采集两条三条,以免频率太高,被封。又可以不间断运行。
你如果想通过设置set_time_limit来延长php运行时间,是不现实的。比如我vps,我用crontab设置采集程序一分钟运行一次,第运行一次可以采集两三条,一天也能采集好几千条了
网络连接错误,获取内容为空,那就重试,你也可以让它采集下一条网址,跳过当前网址,做个判断就可以了啊
mulao 发表于 2013-8-8 16:26 static/image/common/back.gif
....我权限不能短消息
我一般采集都是用定时任务方式,比如每分钟采集两条三条,以免频率太高,被封。 ...
如果下个1分钟调用的时候程序还在运行,怎么处理?系统会自动处理?
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]