php静态文件返回304技巧分享


Posted in PHP onJanuary 06, 2015

有时一些静态文件(如图片)会由php输出,会发现请求都是200,静态文件每次都去服务器上请求太浪费资源了,这时如何让浏览器缓存图片呢?就需要我们在php中输出304了。

我们可以利用php中的 HTTP_IF_MODIFIED_SINCE 结合etag来干这事。Etag没有明确规定的格式,我们可以用文件修改时间的md5值,代码如下:

private function _addEtag($file) {

    $last_modified_time = filemtime($file); 

    $etag = md5_file($file);

    // always send headers 

    header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); 

    header("Etag: $etag"); 

    // exit if not modified

    if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time || 

    @trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) { 

        header("HTTP/1.1 304 Not Modified"); 

        exit; 

    }

}

在代码中可以在静态文件(如图片)输出之前调用即可。

PHP 相关文章推荐
提升PHP执行速度全攻略(下)
Oct 09 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
PHP生成Gif图片验证码
Oct 27 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
php获取英文姓名首字母的方法
Jul 13 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
Sep 23 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
Dec 19 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
php使用pecl方式安装扩展操作示例
Aug 12 PHP
php判断当前用户已在别处登录的方法
Jan 06 #PHP
php实现utf-8转unicode函数分享
Jan 06 #PHP
windows中为php安装mongodb与memcache
Jan 06 #PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 #PHP
php基于表单密码验证与HTTP验证用法实例
Jan 06 #PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 #PHP
phplot生成图片类用法详解
Jan 06 #PHP
You might like
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python标准库defaultdict模块使用示例
2015/04/28 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
计算机专业个人求职自荐信
2013/09/21 职场文书
关于工资低的辞职信
2014/01/14 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
爱晚亭导游词
2015/02/09 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
2015新学期家长寄语
2015/02/26 职场文书
罚款通知怎么写
2015/04/22 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
详细聊聊vue中组件的props属性
2021/11/02 Vue.js