喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【村长请吃饭啊】 ---北京诚聘--- 【你还在犹豫吗?】

上一主题 下一主题
 14  1/2  1  2  > 
     
标题: 用PHP控制用户浏览器缓存!  
 
longbill
注册会员
Rank: 2



UID 69845
精华 0
积分 116
帖子 82
金钱 116 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-3-18
状态 离线
用PHP控制用户浏览器缓存!

原文地址: http://www.longbill.cn/blog/index.php?id=56
    你写的php程序是否高效?你是否会担心自己的程序太庞杂,执行速度很慢?你是否用过php动态生成图片?
   其实每种浏览器都有缓存策略,会暂时将每一个浏览过的文件缓存在一个特殊的文件夹里。我们就可以在用户重复提交页面请求的时候,告诉用户这个页面没有改变,可以调用缓存。 那我们怎么知道用户有没有这个页面的缓存数据呢? 其实浏览器在发送请求的时候会先发送http头,一般象这样:

QUOTE:
Date: Sun, 30 Jul 2006 09:18:11 GMT
Content-Type: image/gif
Last-Modified: Wed, 19 Jul 2006 07:40:06 GMT
ETag: "8c55da8d6abc61:2327"
Content-Length: 14757
其中Last-Modified: Wed, 19 Jul 2006 07:40:06 GMT
ETag: "8c55da8d6abc61:2327"就是有关页面的缓存信息的。然后如果服务器返回的响应代码不是HTTP 200 (OK),而是 304的话,浏览器就会从缓存中读取数据。
    根据这个原理,我写了一个函数,这个函数可以用在不经常更新或者需要经常刷新的页面,可以大大减轻服务器的负担,因为它如果发现客户端有缓存,就向客户端发送一个304响应,然后停止程序的执行。
    演示地址:http://www.longbill.cn/down/sample/etag.php

<?php
cache();
echo date("Y-m-d H:i:s");  

function cache()
{//author:Longbill ( www.longbill.cn )
      $etag = "eeee";  //标记字符串,可以任意修改
      if ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
      {
            header('Etag:'.$etag,true,304);
            exit;
      }
      else header('Etag:'.$etag);
}
?>




PHPCMS文件管理器
2006-7-30 05:49 PM#1
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
fcicqbbs
注册会员
Rank: 2



UID 74804
精华 0
积分 96
帖子 110
金钱 96 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-6-10
状态 离线
[推荐阅读] 建议大家发贴之前看看《提问的艺术》
文章不错.不过好象和规则有点冲突

(任何参赛文章在喜悦村发表24小时内不得转投其他网站,包括作者个人网站及博客等,以免造成认定上的混乱)

另外能否分析一下大多数服务器etag是如何得到的?




doc
2006-7-30 06:29 PM#2
查看资料  访问主页  发短消息  顶部
 
longbill
注册会员
Rank: 2



UID 69845
精华 0
积分 116
帖子 82
金钱 116 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-3-18
状态 离线
[推荐阅读] 【北京.海淀】招聘PHP程序员
楼上说的对啊,其实我是在我的blog上发表了之后就马上发到这里来了。至于参赛则是我发了之后才看到的。



PHPCMS文件管理器
2006-7-30 06:34 PM#3
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
longbill
注册会员
Rank: 2



UID 69845
精华 0
积分 116
帖子 82
金钱 116 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-3-18
状态 离线
[推荐阅读] 声卡哑巴了
php里面,来自客户端的etag在$_SERVER的HTTP_IF_NONE_MATCH项里。
也就是$_SERVER['HTTP_IF_NONE_MATCH']




PHPCMS文件管理器
2006-7-30 06:35 PM#4
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 广州诚聘程序开发和美工兼职
Etag是页面的实体标签。最好是网站页面中的唯一性



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-7-30 09:16 PM#5
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
longbill
注册会员
Rank: 2



UID 69845
精华 0
积分 116
帖子 82
金钱 116 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-3-18
状态 离线
[推荐阅读] 我也是,只能发帖不能回帖


QUOTE:
Etag是页面的实体标签。最好是网站页面中的唯一性
?????




PHPCMS文件管理器
2006-7-31 02:12 PM#6
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
菜鸟也要有理想
中级会员
Rank: 3Rank: 3
一般会员



UID 65342
精华 0
积分 439
帖子 426
金钱 439 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-8-1
状态 离线
[推荐阅读] 头大问题
支持
这个对于大流量的站点很有用
2006-8-1 12:31 AM#7
查看资料  发短消息  顶部
 
游戏人间
版主
Rank: 7Rank: 7Rank: 7
风云山庄大少爷


UID 62639
精华 2
积分 14310
帖子 7146
金钱 14171 喜悦币
威望 20
人脉 119
阅读权限 100
注册 2004-12-21
来自 广西人在北京
状态 离线
[推荐阅读] PHP空间
贴的代码占比例挺大.



 
群号:6025396/6025252/19520091(广西PHP交流/PHP高级编程/算法交流)、饿踢Blog

寧可在嘗試中失敗,也不在保守中成功!

不為失敗找理由,只為成功找方法!
 
2006-8-1 09:31 AM#8
查看资料  访问主页  Blog  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 问个超难问题
Etag是实体标签,强加定义没什么意思。看一下更简单的,运行下例就知道了。

<?php
header
('Last-Modified:Tue,01 Aug 2000 10:26:24 GMT');
echo 
date("Y-m-d H:i:s");
?>
服务端只输出一次,以后的都在客户端的缓存里读。




五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-8-1 10:55 AM#9
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
starDust
注册会员
Rank: 2



UID 72487
精华 0
积分 135
帖子 153
金钱 135 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-4-28
状态 离线
[推荐阅读] xml与数据库 求帮助
如何控制缓存时间啦?假如我想缓存一个小时,一小时后第一次访问生成新的内容
或者,能在php中强制清除缓存吗?




原来是基因改造了世界
2006-8-8 09:41 AM#10
查看资料  发短消息  顶部
 14  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.026195 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP