`
king_c
  • 浏览: 225479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

file_get_contents 增加超时的时间限制

    博客分类:
  • php
 
阅读更多

在使用file_get_contents函数的时候,经常会出现超时的情况,在这里要通过查看一下错误提示,看看是哪种错误,比较常见的是读取超时,这种情况大家可以通过一些方法来尽量的避免或者解决。这里就简单介绍两种:

一、增加超时的时间限制

这里需要注意: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);
fpassthru($fp);

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

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

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

 

以上方法对付超时已经OK了。

这里会出现一个潜在的错误:如果文件不存在的话,程序将进入死循环,因此,加入判断次数。假设只检查4次。

以下是代码:

$i=0;
while(!$content or $i==4){
  @$content =file_get_contents($url);
  $i++;
}
if($i==4) exit("next");


4次之后还没取到,直接进入下一个函数吧!上面只是终止全部操作,这里的函数可以自行配置

 

那么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.updateweb.cn', $data);

OK , 上面函数完美了,既解决了超时控制又解决了Post传值。再配合康盛的改良版RC4加密解密算法,做一个安全 性很高的webservice就简单多了。

分享到:
评论

相关推荐

    PHP file_get_contents 函数超时的几种解决方法

    首先,我们要明确一点:`set_time_limit` 函数仅用于设置整个PHP脚本的执行时间限制,并不能直接影响`file_get_contents`函数的超时设置。如果你发现`file_get_contents`在获取远程URL时超时,需要通过创建自定义的...

    PHP file_get_contents设置超时处理方法

    1. 增加超时的时间限制:通过设置context的timeout参数来延长超时时间。示例如下: ```php $opts = array( 'http' =&gt; array( 'method' =&gt; "GET", 'timeout' =&gt; 10, // 单位是秒 ) ); $cnt = 0; while($cnt ($...

    PHP file_get_contents函数读取远程数据超时的解决方法

    总的来说,解决`file_get_contents` 读取远程数据超时的问题,主要通过设置超时时间和采用重试机制,以及在处理大文件时选择更合适的读取方法。理解这些技巧将有助于编写更健壮和高效的PHP代码。

    file_get_contents获取不到网页内容的解决方法

    如果遇到`file_get_contents`超时,可以尝试增加超时时间,或者使用cURL进行更精细的控制。 总之,当`file_get_contents`遇到获取不到网页内容的问题时,可以考虑使用cURL作为替代,利用其强大的功能和更好的错误...

    深入php函数file_get_contents超时处理的方法详解

    它主要用于设置当前PHP脚本运行的最大时间(以秒为单位),但这个限制并不直接影响 `file_get_contents()` 的超时设置。`file_get_contents()` 的超时是由其内部使用的流上下文(stream context)控制的。 要修改 `...

    php 使用file_get_contents读取大文件的方法

    这可以通过适当调整脚本执行时间限制来实现。 3. 在使用 fread 或 file_get_contents 时,如果有条件应当使用 offset 和 maxlen 参数来精确控制读取的范围,以减少内存的占用。 4. 如果使用内存映射文件技术,可以...

    比file_get_contents稳定的curl_get_contents分享

    如果服务器没有安装`curl`库,而`file_get_contents`又无法满足需求,可以考虑使用`stream_context_create`创建自定义的HTTP上下文,通过设置超时时间来优化`file_get_contents`的性能。 在选择`curl`还是`file_get...

    PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析

    在描述的问题中,服务器的CPU负载增加,`php-cgi`进程的CPU使用率达到100%,通常是由`file_get_contents()`长时间等待远程响应而引起的。`file_get_contents()`函数在处理HTTP请求时,并不会受到`php.ini`配置文件中...

    解决file_get_contents无法请求https连接的方法

    如果您无法修改服务器配置,或者上述方法不适用,您可以选择使用cURL库来代替 `file_get_contents`。cURL是一个强大的URL传输库,支持多种协议,包括HTTPS。下面是一个使用cURL的示例函数 `http_request`,它封装了...

    解析PHP中的file_get_contents获取远程页面乱码的问题

    在处理`file_get_contents`时,你可能会遇到其他问题,比如超时或者网络不稳定。可以使用`set_time_limit`和`ini_set('default_socket_timeout')`设置超时限制,或者通过`stream_context_create`创建自定义的流上...

    深入file_get_contents函数抓取内容失败的原因分析

    7. **超时问题**:默认情况下,`file_get_contents` 的超时时间较短,如果目标服务器响应慢,可能导致请求超时。可以设置 `ini_set('default_socket_timeout', seconds)` 来增加超时时间。 综上所述,当遇到 `file_...

    PHP中使用file_get_contents post数据代码例子

    file_get_contents() 默认是通过GET方法获取数据,但通过适当配置,它也可以用来通过POST方法发送数据。 上述内容提到的代码例子主要演示了如何使用file_get_contents()函数来向指定URL发送POST请求并提交数据。...

    详解PHP内置访问资源的超时时间 time_out file_get_contents read_file

    提问我循环用file_get_contents抓取一堆url,但总是会在不到第100个URL的时候停下,提示我:“Warning: file_get_contents&#40;URL&#41; [function.file-get-contents]: failed to open stream: HTTP request failed...

    php中使用Curl、socket、file_get_contents三种方法POST提交数据

    不过,`file_get_contents` 不支持所有协议,且不提供一些高级特性,如自定义头信息、POST 数据或超时控制。当需要更复杂的网络操作时,`file_get_contents` 可能不够用。 3. **Socket** Socket 提供了底层网络...

    执行、获取远程代码返回:file_get_contents 超时处理的问题详解

    针对 `file_get_contents()` 的超时问题,我们可以利用其第三个参数 `context` 来设置超时时间。例如: ```php $url = "http://zhoz.com/zhoz.php"; $ctx = stream_context_create(array( 'http' =&gt; array( 'time...

    深入file_get_contents与curl函数的详解

    `curl_setopt()` 用来设置 `curl` 的各种选项,例如 `CURLOPT_URL` 设置目标URL,`CURLOPT_RETURNTRANSFER` 控制是否返回响应内容,`CURLOPT_CONNECTTIMEOUT` 设定连接超时时间。`curl_exec()` 执行 `curl` 会话并...

Global site tag (gtag.js) - Google Analytics