专栏首页技术博文file_get_contents()函数超时处理方法

file_get_contents()函数超时处理方法

file_get_contents — 将整个文件读入一个字符串

string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )

参数

描述

path

必需。规定要读取的文件。

include_path

可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。

context

可选。规定文件句柄的环境。 context 是一套可以修改流的行为的选项。若使用 null,则忽略。

start

可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。

max_length

可选。规定读取的字节数。该参数是 PHP 5.1 新加的。

在获取文件的 时候,可能会因为网络等因素,造成获取失败,这里介绍两种方法进行解决

一.增加超时的时间限制  这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。真正的修改 file_get_contents延时可以用resource $context的timeout参数: 

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

其中,stream_context_create 作用:创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。 

函数原型:resource stream_context_create ([ array $options [, array $params ]] ) 

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

<?php
$cnt=0; 
while($cnt < 3 && ($str=@file_get_contents('http...'))===FALSE)
{
  $cnt++;
}
?>

以上方法对付超时已经OK了。 有人发现了'method'=>”GET”,GET也可以设置成post,函数如下:

<?php
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.example.com', $data);
?>    

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 计算每个请求的平均响应时间

    目的 找出是哪些请求长期影响了系统性能 方法 web服务器的日志会记录每个请求的响应时间,分析访问日志,对相同请求的响应时间进行累加,响应时间的和 除以 这个请...

    dys
  • Mysql体系结构

    客户端连接器 mysql为外部程序提供的客户端connector,例如 PHP JAVA .NET RUBY 连接管理 管理客户端连接的相关操作,例如 ...

    dys
  • java8 stream

    转载:猿天地 链接:http://cxytiandi.com/blog/detail/2220 Stream 作为 Java 8 的一大亮点,我个人是非常喜...

    猿天地
  • MySql拒绝访问

    昨天用phpMyAdmin修改账号密码后,出现了下图的情况 ? 原来,用phpmyadmin链接mysql数据库,并修改mysql数据库的密码。但修改的方式...

    smy
  • 你应该这个姿势学习PHP(1)

      应用场景:能防止sql的注入(当然并不完全是可以,我们可以使用pdo进行预处理然后方式sql的注入,安全不能只靠一种方式防止事情的发生)

    思梦php
  • 我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言

    看了不少朋友圈里推荐的Python爬虫文章,都觉得太小儿科,处理内容本来就是PHP的强项,Python唯一的好处估计也就天生的Linux自带,和Perl一样,这...

    前朝楚水
  • 重新编译安装swoole支持OpenSSL

    1、下载:wget http://pecl.php.net/get/swoole-1.9.22.tgz 2、解压:tar zxvf swoole-1.9.22....

    一夕如环
  • PHP垃圾回收机制

    1、每一个变量定义时都保存在一个叫zval的容器里面,这里面包含了数量的类型和和值,还包含了一个refcount(理解为存在几个变量个数)和is_ref(理解为...

    思梦php
  • 腾讯高级设计师:如何规划有格调的设计作品集?

    患者:找工者和整理癖 症状:情绪时而亢奋,时而低落,逐渐出现多种人格分裂的症状。可能偶然伴随脸上爆痘痘的情况出现。 本期关键字:作品集,简历,求职,整理,外面的...

    前朝楚水
  • 没有event loop的PHP

    javascript是单线程脚本语言,所以有了event loop机制,但是 php真的有多进程,多线程吗? 一,php利用socket来实现多线程 在服务器端...

    前朝楚水

扫码关注云+社区

领取腾讯云代金券