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 array_push 数组函数
Dec 26 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
php过滤XSS攻击的函数
Nov 12 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
php读取csc文件并输出
May 21 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
常用PHP封装分页工具类
Jan 14 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
实例解析php的数据类型
Oct 24 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
激活 ActiveX 控件
2006/10/09 Javascript
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
python实现邮件循环自动发件功能
2020/09/11 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
UNIX命令速查表
2012/03/10 面试题
《骆驼和羊》教学反思
2014/02/27 职场文书
水利水电专业自荐信
2014/07/08 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
授权收款委托书范本
2014/10/10 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
检讨书范文
2015/01/27 职场文书
辞职信格式模板
2015/02/27 职场文书
小学思想品德教学反思
2016/02/24 职场文书
如何写好开幕词?
2019/06/24 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang