文档章节

file_get_contents 增加超时的时间限制

养在鱼缸的鱼
 养在鱼缸的鱼
发布于 2014/04/16 02:13
字数 553
阅读 103
收藏 2

在使用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就简单多了。

本文转载自:http://blog.csdn.net/gj369326973/article/details/6153342

养在鱼缸的鱼
粉丝 5
博文 88
码字总数 42621
作品 0
广州
私信 提问
PHP file_get_contents 函数超时的几种解决方法

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

bo-少
2016/06/12
142
0
file_get_contents设置超时

话说,从PHP5开始,filegetcontent已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,filegetcontents其实也可以POST数据。 今天说的这篇是讲超时...

果树啊
06/14
11
0
分析php代码报502的错

首先得了解502错误的定义(http://www.checkupdown.com/status/E502_zh.html)以及主要是考虑是不是代理(访问的上游)出了问题 查询php-fpm的日志可以发现有php运行超时的记录 ... [pool ww...

itlittlefun
2017/02/08
0
0
curl 和file_get_contents

function httpGet($url,$time=5) {$curl = curl_init();curlsetopt($curl, CURLOPTRETURNTRANSFER, true);curlsetopt($curl, CURLOPTTIMEOUT,$time);curlsetopt($curl, CURLOPTURL, $url); $......

just_wkj
2016/02/03
42
0
php file_get_contents设置timeout失效

我在使用file_get_contents进行获取内容的时候设置了超时时间3秒,但是在获取过程中,发现,有些请求远远超过这个值,代码如下: $opts = array( 'http' => array( 'method' => "GET", 'time......

一介屌丝
2014/02/28
555
6

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.5K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部