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 相关文章推荐
从零开始 教你如何搭建Discuz!4.1论坛
Jul 07 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
php商品对比功能代码分享
Sep 24 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
浅析PHP中的 inet_pton 网络函数
Dec 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
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
JSONP基础知识详解
2017/03/19 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
Python的时间模块datetime详解
2017/04/17 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python数据归一化及三种方法详解
2019/08/06 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
应届生新闻编辑求职信
2013/11/19 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
土地租赁协议书
2015/01/29 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
社会实践单位意见
2015/06/05 职场文书
四群教育工作总结
2015/08/10 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript