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 Ajax乱码
Apr 09 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
php中如何防止表单的重复提交
Aug 02 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
php强制更新图片缓存的方法
Feb 11 PHP
php实现递归抓取网页类实例
Apr 03 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
PHP内核探索:哈希表碰撞攻击原理
Jul 31 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
Laravel 读取 config 下的数据方法
Oct 13 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 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 Session存储到Redis的方法
2013/11/04 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
js操作table中tr的顺序实现上移下移一行的效果
2018/11/22 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
在Django中创建动态视图的教程
2015/07/15 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python爬虫添加请求头代码实例
2019/12/28 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
大学生实习自我鉴定
2013/12/11 职场文书
公益广告宣传方案
2014/02/28 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
网聊搭讪开场白
2015/05/28 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书