使用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下载文件的超时时间的更多相关文章

  1. 网络传输速度bps与下载文件所需时间的换算

    相信很多同志都非常关注自己家的计算机上网的宽带是多少.关心单位上网的宽带是多少! 但是很多同志都经常误解网络传输速度,以至于责备网络接入商(电信.网通.铁通等单位)欺骗用户,限制上网的速度! 本文,就 ...

  2. Java设置Client Socket链接Server超时时间

    Java设置Client Socket链接Server超时时间 学习了:http://blog.csdn.net/tterminator/article/details/52494141 http:/ ...

  3. 设置AFNetworking网络请求的超时时间

    http://www.mamicode.com/info-detail-511816.html // 设置超时时间 [manager.requestSerializer willChangeValue ...

  4. 怎样设置IIS6.0的闲置超时时间

    打开IIS 信息服务管理器 1)打开IIS,点击应用程序池 2)找到Bs项目使用具体程序池(DspTest) 3)右键属性找到高级设置-- 进程模型 -- 闲置超时 4)设置闲置超时时间(默认为20分 ...

  5. sql server中 设置与查看锁的超时时间(ZT) @@LOCK_TIMEOUT

      在数据库的应用系统中,死锁是不可避免的.通过设置死锁的处理优先级方法,可以在数据库引擎中自动检测到死锁,对发生的死锁会话进行干预,从而达到解除死锁的目点,但在这种情况下,会话只能被动的等待数据库引 ...

  6. 正确设置Firefox下载文件文件名的方法

    不同的浏览器需要特殊设置,主要是火狐比较特殊,火狐可能给文件名加上“%0d%0a"这样的编码字符(换行的意思).不得不佩服网上的高手,这也能解决. [HttpGet] public File ...

  7. ASP.NET Core如何设置请求超时时间

    如果一个请求在ASP.NET Core中运行太久,会导致请求超时,目前ASP.NET Core对请求超时的设置比较麻烦,本文列出目前收集到的一些方法,供大家参考. 部署ASP.NET Core到IIS ...

  8. 解决ssh连接超时时间(ssh timeout)的设置方法

    本文介绍下,linux中ssh连接超时时间的设置方法,以避免总是被强行退出.有需要的朋友,参考下吧.有关修改ssh连接超时时间的方法,网上介绍的很多了.比如下面这个:可以减少ssh连接超时等待的时间: ...

  9. gfs下载文件较大,可以分区域分变量下载

       一.下载 所有字段的GFS预报(大致有325个字段),1度的文件有1G多,0.5度的3.5G左右. 若每天下载0.6.12.18四个发布点的数据,那是很费时费力的.而且经常会被IDS/IPS设备 ...

随机推荐

  1. jQuery 焦点图 旋转木马

    jQuery BxSlider 滑动滚动效果 jQuery Easing 动画效果扩展

  2. WorkbookDesigner mvc里面返回file

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  3. 开发常用到的terminal命令

    1.删除work_plugin目录下的.svn文件(最后面的;也是命令的一部分) sudo find /Users/maxinliang/DaTang/work_plugin ".svn&q ...

  4. listview 设置数组为空

    listview.setEmpty(View view); 使用listView或者gridView时,当列表为空时,有时需要显示一个特殊的empty view来提示用户,今日对这个方法进行一下小结, ...

  5. (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)

      异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel(“yourScene ...

  6. using-ef-code-first-with-an-existing-database

    http://weblogs.asp.net/scottgu/using-ef-code-first-with-an-existing-database http://weblogs.asp.net/ ...

  7. WEB安全入门(转)

    一. 首先你得了解Web Web分为好几层,一图胜千言:事实是这样的:如果你不了解这些研究对象是不可能搞好安全研究的.这样看来,Web有八层(如果把浏览器也算进去,就九层啦,九阳神功……)!!!每层都 ...

  8. Probabilistic Graphical Models

    http://innopac.lib.tsinghua.edu.cn/search~S1*chx?/YProbabilistic+Graphical+Models&searchscope=1& ...

  9. 8月11日嵌入式Linux开发免费项目体验邀您参与

    嵌入式Linux开发免费项目体验开课啦~~我们特意邀请到粤嵌金牌讲师和技术专家,为大家带来精彩有趣的嵌入式公开课,涉及到嵌入式学习.研发的方方面面.课堂中我们能体验到的不仅仅是最新资讯.技术体验,还有 ...

  10. MySQL工具汇总

    本博客已经迁移至:http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文请点击:http://cenalulu.github.io/mysql/mysql-tools-lis ...