php静态文件返回304技巧分享
有时一些静态文件(如图片)会由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网站开发中常用的8个小技巧
PHP是一种用于创建动态WEB页面的服务端脚本语言.如同ASP和ColdFusion,用户可以混合使用PHP和HTML编写WEB页面,当访 问者浏览到该页面时,服务端会首先对页面中的PHP命令进行处理,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器.但是与ASP或 ColdFusion不同,PHP是一种源代码开放程序,拥有很好的跨平台兼容性.用户可以在Windows NT系统以及许多版本的Unix系统上运行PHP,而且可以将PHP作为Apache服务器的内置模块或CGI程序运行. 本
-
10条PHP高级技巧[修正版]
1.使用一个SQL注射备忘单 一个基本的原则就是,永远不要相信用户提交的数据. 另一个规则就是,在你发送或者存储数据时对它进行转义(escape). 可以总结为:filter input, escape output (FIEO). 输入过滤,输出转义. 通常导致SQL注射漏洞的原因是没有对输入进行过滤,如下语句: 复制代码 代码如下: <?php $query = "SELECT * FROM users WHERE name = '{$_GET['name']}'"; 在这个
-
PHP Mysql编程之高级技巧
笔者做了以下的尝试. <?php $data_time="1998-12-31 23:59:59"; $connect_id=mysql_connect('localhost'); $query_id=mysql_query("SELECT DATE_ADD(' $data_time',INTERVAL 1 YEAR)", $connect_id); $data_time=mysql_result( $query_id,0); mysql_close(
-
10条php编程小技巧
1.写程序的时候会用到这种情况,比如对一个数字进行四舍五入取整.很多人会这样写: 复制代码 代码如下: input a if a - int(a) >= 0.5 then a = a +1 end if 其实这个判断语句可以使用一个很简单的表达式来写 复制代码 代码如下: a = fix(a + sgn(a) *0.5) 用php写作: 复制代码 代码如下: $a = intval($a + 0.5 * ($a >0 ? 1 : -1) ); 分析: 假设 a为 4.4 那么 a+
-
php数组键名技巧小结
本文较为详细的总结了php数组键名的技巧.分享给大家供大家参考.具体分析如下: 1.$arr[true] 等价于 $arr[1]:$arr[false] 等价于 $arr[0]. 2.使null做为键名,相当于创建或覆盖一个$arr[null],可以使用$arr[null]或$arr[""]来访问. 3.使用带小数点的数字作为键名时,键名会自动截取整数部分作为键名.如$arr[123.45]=5,你使用$arr[123.45]或$arr[123]均可以取得键值:用foreach遍历时,
-
PHP小技巧之函数重载
1.可以使用func_get_args()和func_num_args()这两个函数实现函数的重载!! PHP代码: 复制代码 代码如下: function rewrite() { $args = func_get_args(); if(func_num_args() == 1) { func1($args[0]); } else if(func_num_args()
-
php数组索引与键值操作技巧实例分析
本文实例讲述了php数组索引与键值操作技巧.分享给大家供大家参考.具体如下: <?php $array = array("a", "b","c"); //定义数组 $array[] = "Simon"; //增加一个新的数组元素 print_r($array); //输出数组 ?> <?php $array = array("a", "b","c")
-
PHP中文编码小技巧
PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码,中国的 GB2312-80,日本的 JIS 等.作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用.字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类.早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage
-
PHP的十个高级技巧(上中下)第1/3页
全球超过300万个互联网网站的管理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一.其特点是运行速度快.稳定可靠.跨平台,而且是开放源代码软件.随你使用的水平不同,PHP可以很简单,也可以很复杂,可以只使用它发送HTML表格元素,还可以在PHP应用程序中集成Java和XML. 如果你对PHP有一定的了解或者看过一些初步的教材,这些技巧可以扩展你对PHP的认识,使你掌握一些常见的和高级的PHP功能. 一.把PHP安装为Apache的DSO PHP在Linux/Unix平台上经常与Apa
-
PHP编程之高级技巧——利用Mysql函数
尽管PHP为我们提供了很多函数,但有些东西处理起来还是不很方便.譬如PHP提供的日期时间函数就很有限.Mysql为我们提供了不少此类的函数.是否可以利用Mysql函数来处理PHP程序呢?笔者做了以下的尝试. <?php $data_time="1998-12-31 23:59:59"; $connect_id=mysql_connect('localhost'); $query_id=mysql_query("SELECT DATE_ADD('$
-
十个PHP高级应用技巧果断收藏
PHP 独特的语法混合了 C.Java.Perl 以及 PHP 自创新的语法.它可以比 CGI或者Perl更快速的执行动态网页.用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多.下面介绍了十个PHP高级应用技巧. 1, 使用ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里. 这种方法把存储空间降到了接近四分之一(char(15) 的 15 个字节对整形的 4 个字节),计算
-
php定界符<<<使用技巧和实例
php界定符就是为了照样输出内容.它的格式如下: 复制代码 代码如下: $str = <<< EOF Here is your string ...... EOF; 其中EOF是自定义的变量,但要成对出现! 附上一段php示例代码: 复制代码 代码如下: <?php $a = "www.jb51.net"; print <<< jb51 <select> <option value="1"
-
提高php编程效率技巧
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的"函数"(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加 上了双引号). 1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row['id'] 的速度是$row[id]的7倍. 3.echo 比 print 快,并且使用echo的多重参数(译注
-
php导入大量数据到mysql性能优化技巧
本文实例讲述了php导入大量数据到mysql性能优化技巧.分享给大家供大家参考.具体分析如下: 在mysql中我们结合php把一些文件导入到mysql中,这里就来分享一下我对15000条记录进行导入时分析与优化,需要的朋友可以参考一下. 之前有几篇文章,说了最近tiandi在帮朋友做一个小项目,用于统计电话号码的,每次按需求从数据库里随机生成打包的电话号码,然后不停地让人打这些电话号码推销产品(小小鄙视一下这样的行为).但是朋友要求帮忙,咱也不能不帮啊,是吧.程序两个星期前已经做好,测试完毕交工
随机推荐
- VBScript 文件操作代码小结
- 纯JavaScript代码实现文本比较工具
- Angular设置title信息解决SEO方面存在问题
- 弹出消息的bat代码(msg命令详细解释)
- 检查网络信息的bat[批处理]文件
- setTimeout的延时为0时多个浏览器的区别
- Laravel实现用户多字段认证的解决方法
- [PHP]经常用到的实用函数集合第1/2页
- 解析:内联,左外联,右外联,全连接,交叉连接的区别
- 很好用的js日历算法详细代码
- php上传图片并压缩的实现方法
- php简单静态页生成过程
- oracle 声明游标(不具备字段)规则应用
- js点击出现场层层外点击层消失的代码
- 微信小程序 下拉菜单的实现
- 解决Photoshop CS3在Win 2003下无法安装的解决方法
- Android应用开发中使用Fragment的入门学习教程
- Java位运算和逻辑运算的区别实例
- SpringBoot Kafka 整合使用及安装教程
- iOs迁至WKWebView跨过的一些坑