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 相关文章推荐
一个高ai的分页函数和一个url函数
Oct 09 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
PHP7匿名类的用法示例
Apr 05 PHP
php传值和传引用的区别点总结
Nov 19 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
深入浅出理解javaScript原型链
2015/05/09 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
美国手机支架公司:PopSockets
2019/11/27 全球购物
青年志愿者事迹材料
2014/02/07 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
视光学专业自荐信
2014/06/24 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
如何利用python实现列表嵌套字典取值
2022/06/10 Python
字节飞书面试promise.all实现示例
2022/06/16 Javascript