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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
php面向对象全攻略 (四)构造方法与析构方法
Sep 30 PHP
php select,radio和checkbox默认选择的实现方法
May 15 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
那些年一起学习的PHP(二)
Mar 21 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
php获取301跳转URL简单实例
Dec 16 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 PHP
PHP中header用法小结
May 23 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 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下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php $_SERVER当前完整url的写法
2009/11/12 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
python实现获取序列中最小的几个元素
2014/09/25 Python
Python 抓取动态网页内容方案详解
2014/12/25 Python
Python开发常用的一些开源Package分享
2015/02/14 Python
Python中设置变量访问权限的方法
2015/04/27 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
对numpy中轴与维度的理解
2018/04/18 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
python excel和yaml文件的读取封装
2021/01/12 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
餐饮部总监岗位职责范文
2014/02/13 职场文书
python - timeit 时间模块
2021/04/06 Python
详细聊聊vue中组件的props属性
2021/11/02 Vue.js