php下载文件超时时间的设置方法


Posted in PHP onOctober 06, 2016

使用curl

可以使用curl自己实现一个curl_file_get_contents函数

//CURLOPT_FOLLOWLOCATION TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。(注意:这是递归的,"Location: " 发送几次就重定向几次,除非设置了 CURLOPT_MAXREDIRS,限制最大重定向次数
function curl_file_get_contents($durl){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $durl);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将获取的信息以字符串形式返回
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
 curl_setopt($ch, CURLOPT_MAXREDIRS, 5);  //指定最多的 HTTP 重定向次数
 curl_setopt($ch,CURLOPT_TIMEOUT,2); //允许 cURL 函数执行的最长秒数
 $r = curl_exec($ch);
 if(curl_errno($ch)){  //如果存在错误,输出错误(超时是不会抛出异常的,需要用这个函数设置自己的处理方式)
  echo 'Curl error: ' . curl_error($ch);
 }
 return $r;
}

超时的错误输出类似下边这样

Curl error: Operation timed out after 991 milliseconds with 3706978 out of 155372766 bytes receiveddone

其他可能方式

设置脚本的最大执行时间(无效)

void set_time_limit ( int $seconds )

如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。如果设置为0(零),没有时间方面的限制。
当此函数被调用时,set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒
Warning
当php运行于安全模式时,此功能不能生效。除了关闭安全模式或改变php.ini中的时间限制,没有别的办法。
Note:
set_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中,当该脚本已运行。在测量时间是实值的Windows中,情况就不是这样。

因为file_get_contents是一个流操作,所以这个不能限制。

default_socket_timeout (无效)

PHP 中file_get_contents 超时时间

max_execution_time = 30
default_socket_timeout = 60
假设你使用file_get_contents花费45,而max_execution_time是30,它将超时吗?
答案是NO,因为max_execution_time不影响操作系统调用或stream操作
default_socket_timeout是在socket响应之前计算的,只要得到响应,将会一直执行下去

使用HTTP context选项(无效)

HTTP context选项
估计是这里的超时时间不是指的表面上的整个函数的执行时间,还是无效

$opts = array( 
 'http'=>array( 
 'method'=>"GET", 
 'timeout'=>60, 
 ) 
);

$context = stream_context_create($opts); 
$html =file_get_contents('http://www.example.com', false, $context);

以上就是本文的全部内容,希望对大家有所帮助,希望大家继续关注三水点靠木的最新内容。

PHP 相关文章推荐
怎样在PHP中通过ADO调用Asscess数据库和COM程序
Oct 09 PHP
php扩展ZF――Validate扩展
Jan 10 PHP
php adodb连接mssql解决乱码问题
Jun 12 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
用php随机生成福彩双色球号码的2种方法
Feb 04 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
php实现encode64编码类实例
Mar 24 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
详谈php静态方法及普通方法的区别
Oct 04 #PHP
php操作路径的经典方法(必看篇)
Oct 04 #PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 #PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 #PHP
PHP图片添加水印功能示例小结
Oct 03 #PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 #PHP
PHP实现生成带背景的图形验证码功能
Oct 03 #PHP
You might like
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
对python内置map和six.moves.map的区别详解
2018/12/19 Python
python3去掉string中的标点符号方法
2019/01/22 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
原装进口全世界:天猫国际
2016/08/03 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
改进作风怎么办发言材料
2014/08/17 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
工作后的感想
2015/08/07 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书
python playwrigh框架入门安装使用
2022/07/23 Python