详解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 相关文章推荐
在wamp集成环境下升级php版本(实现方法)
Jul 01 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 PHP
php备份数据库类分享
Apr 14 PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 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工厂模式的好处
2013/06/18 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
JavaScript 巧学巧用
2017/05/23 Javascript
React中的render何时执行过程
2018/04/13 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
Python实现学校管理系统
2018/01/11 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
Python实现播放和录制声音的功能
2020/08/12 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
党风廉政承诺书
2014/03/27 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
个人总结与自我评价
2015/02/14 职场文书
社区义诊通知
2015/04/24 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python