详解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 13 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
header跳转和include包含问题详解
Sep 08 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
使用php计算排列组合的方法
Nov 13 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
php实现简易聊天室应用代码
Sep 23 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 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
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
PHP实现百度人脸识别
2019/05/06 PHP
永不消失的title提示代码
2007/02/15 Javascript
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
js取得url地址参数实例
2013/02/22 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
python实现web方式logview的方法
2015/08/10 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
python实现周期方波信号频谱图
2018/07/21 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Python中的类与类型示例详解
2019/07/10 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
初三物理教学反思
2014/01/21 职场文书
年会主持词结束语
2014/03/27 职场文书
保护环境倡议书范文
2014/05/13 职场文书
高效课堂标语
2014/06/26 职场文书
社保转移委托书范本
2014/10/08 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
主持人大赛开场白
2015/05/29 职场文书
新闻稿件写作技巧
2015/07/18 职场文书