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出错界面
Oct 09 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
php实现无限级分类实现代码(递归方法)
Jan 01 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
php修改文件上传限制方法汇总
Apr 07 PHP
php简单生成随机数的方法
Jul 30 PHP
PHP缓冲区用法总结
Feb 14 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 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以ROOT权限执行系统命令的方法
2011/02/10 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
JavaScript中的其他对象
2008/01/16 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
Js基础学习资料
2010/11/23 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
python读写json文件的简单实现
2017/04/11 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
python 检查文件mime类型的方法
2018/12/08 Python
详解python中__name__的意义以及作用
2019/08/07 Python
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
大学生找工作求职信
2014/07/09 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
论文致谢词范文
2015/05/14 职场文书
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers