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 相关文章推荐
一个捕获函数输出的函数
Feb 14 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
ThinkPHP关于session的操作方法汇总
Jul 18 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
php获取远程文件大小
Oct 20 PHP
PHP递归创建多级目录
Nov 05 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
2017年最新PHP经典面试题目汇总(上篇)
Mar 17 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
python自定义解析简单xml格式文件的方法
2015/05/11 Python
使用Python & Flask 实现RESTful Web API的实例
2017/09/19 Python
Python字典底层实现原理详解
2019/12/18 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
vue项目实现分页效果
2021/03/24 Vue.js
大学生应聘自荐信
2013/10/11 职场文书
医药大学生求职简历的自我评价
2013/10/17 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
紧急迫降观后感
2015/06/15 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python
nginx请求限制配置方法
2021/07/09 Servers