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 session 错误
May 21 PHP
PHP中使用gettext来支持多语言的方法
May 02 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
常用PHP框架功能对照表
Oct 23 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
PHP实现图片上传并压缩
Dec 22 PHP
Laravel 5.3 学习笔记之 配置
Aug 28 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 PHP
Yii框架where查询用法实例分析
Oct 22 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
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
php获取文件大小的方法
2014/02/26 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Python编程中类与类的关系详解
2019/08/08 Python
Python简易版图书管理系统
2019/08/12 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
应用心理学个人求职信范文
2013/12/11 职场文书
空乘英文求职信
2014/04/13 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
食品安全处置方案
2014/06/14 职场文书
政风行风评议工作总结
2014/10/21 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript