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 文件上传全攻略
Apr 28 PHP
PHP调用Webservice实例代码
Jul 29 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
Jun 05 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
php 发送带附件邮件示例
Jan 23 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
php实现通用的从数据库表读取数据到数组的函数实例
Mar 21 PHP
php实现RSA加密类实例
Mar 26 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 PHP
PHP读取XML格式文件的方法总结
Feb 27 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获取textarea的值并处理回车换行的方法
2014/10/20 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
Python+Django搭建自己的blog网站
2018/03/13 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
感恩节活动方案
2014/01/27 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
2015年技术员工作总结
2015/04/10 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
css背景和边框标签实例详解
2021/05/21 HTML / CSS
springboot中的pom文件 project报错问题
2022/01/18 Java/Android