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 默默经典版本
Aug 04 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
Yii配置文件用法详解
Dec 04 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 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加Nginx实现动态裁剪图片方案
2014/03/10 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
2014年度工作总结报告
2014/12/15 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
电频谱管理的原则是什么
2022/02/18 无线电
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python