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中的string类型使用说明
Jul 27 PHP
UCenter 批量添加用户的php代码
Jul 17 PHP
浅析PHP中的UNICODE 编码与解码
Jun 29 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
详解 PHP加密解密字符串函数附源码下载
Dec 18 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
php实现的XML操作(读取)封装类完整实例
Feb 23 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
PHP中echo与print区别点整理
Mar 09 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基于imap获取邮件实例
2014/11/11 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
PHP重载基础知识回顾
2020/09/10 PHP
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
大三预备党员入党思想汇报
2014/01/08 职场文书
财务总经理岗位职责
2014/02/16 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
作风大整顿心得体会
2014/09/10 职场文书
丧事答谢词
2015/01/05 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
Python turtle实现贪吃蛇游戏
2021/06/18 Python
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python