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 和 MySQL 基础教程(四)
Oct 09 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
javascript,php获取函数参数对象的代码
Feb 03 PHP
让你成为更出色的PHP开发者的10个技巧
Feb 25 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 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程序
2006/10/09 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php实现webservice实例
2014/11/06 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
DWR Ext 加载数据
2009/03/22 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
Vue.js用法详解
2017/11/13 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
python单例模式实例分析
2015/04/08 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
python 创建一维的0向量实例
2019/12/02 Python
对python中各个response的使用说明
2020/03/28 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
Python tkinter实现日期选择器
2021/02/22 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
普师专业个人自荐信范文
2013/11/26 职场文书
暑期社会实践感言
2014/02/25 职场文书
任命书格式
2014/06/05 职场文书
服务理念标语
2014/06/18 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
捐款感谢信
2015/01/20 职场文书
干部外出学习心得体会
2016/01/18 职场文书