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


Posted in PHP onJune 03, 2013

提问
我循环用file_get_contents抓取一堆url,但总是会在不到第100个URL的时候停下,提示我:“Warning: file_get_contents(URL) [function.file-get-
contents]: failed to open stream: HTTP request failed! HTTP/1.0 500 Read timed out
in D:\website\extra.php on line 65”
我在程序的开始已经有set_time_limit(0);了啊,那上面的错误会是因为什么呢?
回答
set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。
从警告信息来看,是被抓取的网页出现了服务器500错误,可能是他的程序出现超时了。
如果想改变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);

这样readfile函数的超时时间就设置成了10秒,如果你够细心的话,还会发现数组中还有一些其他的配置,第一维中的http是指定使用的网络协议,二维中的method批的是http的请求方法get,post,head等,timeout就是超时时间了。我想很多人会使用php内置的file_get_contents函数来下载网页,因为这个函数使用起来够简单。很多人也都很简单的使用它,只要传递一个链接它就可以自动的发送get请求,并将网页内容下载下来。如果比较复杂的情况,比如使用POST请求,使用代理下载,定义User-Agent等等,这时很多人就会认为这个函数做不了这样的事情,就会选择其他方式,如curl,来实现。实际上,这些事情file_get_contents也可以做到,
就是通过它的第三个参数,设置http请求的context
支持的设置和使用方式见官方说明:http://www.php.net/manual/en/context.http.php
附:目前我知道的支持context参数的php内置函数有file_get_contents,file_put_contents,readfile,file,fopen,copy(估计这一类的函数都支持吧,待确认)。
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);

OK , 上面函数完美了,既解决了超时控制又解决了Post传值。再配合康盛的改良版RC4加密解密算法,做一个安全性很高的webservice就简单多了。
PHP 相关文章推荐
基于PHP文件操作的详解
Jun 05 PHP
关于php循环跳出的问题
Jul 01 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
PHP CLI模式下的多进程应用分析
Jun 03 #PHP
基于php-fpm 参数的深入理解
Jun 03 #PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 #PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 #PHP
php cli模式学习(PHP命令行模式)
Jun 03 #PHP
获取PHP警告错误信息的解决方法
Jun 03 #PHP
php cli 小技巧
Jun 03 #PHP
You might like
用PHP将数据导入到Foxmail
2006/10/09 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
python使用Geany编辑器配置方法
2020/02/21 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
工商管理专业学生的自我评价
2013/10/01 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
关于五一放假的通知
2015/08/18 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js
SpringBoot Http远程调用的方法
2022/08/14 Java/Android