详解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 getsiteurl()函数
Sep 05 PHP
php面向对象全攻略 (十五) 多态的应用
Sep 30 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
一些php技巧与注意事项分析
Feb 03 PHP
php表单提交问题的解决方法
Apr 12 PHP
php学习之数据类型之间的转换代码
May 29 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
php中namespace及use用法分析
Dec 06 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 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之对抗Web扫描器的脚本技巧
2008/10/01 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
layui导航栏实现代码
2017/05/19 Javascript
总结js函数相关知识点
2018/02/27 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
vue实现文字加密功能
2019/09/27 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
SVM基本概念及Python实现代码
2017/12/27 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
安全生产检讨书
2014/01/21 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
活动总结报告怎么写
2014/07/03 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
销售助理岗位职责
2015/02/11 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书