Apr14

file_get_contents超时问题的解决方法

Author: leeon转载  Click: 6233   Date: 2010.04.14 @ 11:03:36 am Category: php

一、增加超时的时间限制

这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。
我一开始以为set_time_limit也能影响到file_get_contents,后来经测试,是无效的。真正的修改file_get_contents延时可以用resource $context的timeout参数:


$opts = array(
'http'=>array(
'method'=>"GET",
'timeout'=>60,
)
);
$context = stream_context_create($opts);
$html =file_get_contents('http://www.example.com', false, $context);

二、一次有延时的话那就多试几次

有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃,因为file_get_contents()如果失败将返回 FALSE,所以可以下面这样编写代码:


$cnt=0;
while($cnt < 3 && ($str=@file_get_contents('http...'))===FALSE) $cnt++;

以上方法对付超时已经OK了。那么Post呢?细心点有人发现了'method'=>"GET", 对!是不是能设置成post呢?百度找了下相关资料,还真可以!而且有人写出了山寨版的post传值函数,如下:


function Post($url, $post = null)
{
$context = array();

if (is_array($post))
{
ksort($post);

$context['http'] = array
(

'timeout'=>60,
'method' => 'POST',
'content' => http_build_query($post, '', '&'),
);
}

return file_get_contents($url, false, stream_context_create($context));
}

$data = array
(
'name' => 'test',
'email' => 'test@gmail.com',
'submit' => 'submit',
);

echo Post('http://www.yifu.info', $data);



TAG:   php 超时 timeout

    评论
    • 提交

    分类

    标签

    归档

    最新评论

    ligaofeng在11:55:22评论了
    file_get_contents超时问题的解决方法
    我也不知道叫个啥好在00:59:46评论了
    shell中使用while循环ssh的注意事项
    司马成空在16:14:13评论了
    【原创】ZendStudio中格式化HTML代码错位问题修正
    Owen在22:56:46评论了
    【原创】MyBatis Generator使用小记
    waltye在23:38:05评论了
    【原创】武汉互联网公司介绍[2016年8月更新版]

    我看过的书

    链接

    其他

    访问本站种子 本站平均热度:6010 c° 本站链接数:27 个 本站标签数:428 个 本站被评论次数:87 次