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截取中文字符串的问题
Jul 12 PHP
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
Aug 21 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
浅析PHP中的i++与++i的区别及效率
Jun 15 PHP
PHP中命名空间的使用例子
Mar 22 PHP
PHP中16个高危函数整理
Sep 19 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 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常用技巧总结(附函数代码)
2012/02/04 PHP
php的ddos攻击解决方法
2015/01/08 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
php强制下载文件函数
2016/08/24 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
详解vue axios中文文档
2017/09/12 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
django批量导入xml数据
2016/10/16 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
Python join()函数原理及使用方法
2020/11/14 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
40岁生日感言
2014/02/15 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL