PHP 生成纯静态后更新的问题

2015-04-28 13:07:10 +08:00
 luckylion

假如PHP将页面生成纯静态后,在用户以后访问这个页面时都是直接调用生成后的静态页面,静态页面不根据文件修改时间和现在时间相差做修改,只有在静态文件不存在的情况下PHP才处理重新生成静态文件. 有没有什么方法在静态页面存在的情况下让PHP接收客户端某个简单指令来重新生成静态页面,比如Ctrl+F5刷新,PHP有没有什么函数能接收到Ctrl+F5这个动作

用户→PHP检测有无静态文件→生成静态

http://ww4.sinaimg.cn/large/e6291bfdgw1erl7a2vb5uj20f008lt9a.jpg

2786 次点击
所在节点    问与答
11 条回复
996635
2015-04-28 13:14:47 +08:00
同过header 传个X-xxxxxx过去判断一下吧.
ideaa
2015-04-28 13:21:08 +08:00
这个功能已经集成到了CrossPHP框架的注释配置中了,有兴趣可以看下框架的源码.
justfindu
2015-04-28 13:21:42 +08:00
监控用户的键盘行为... 比如监控到 ctrl+f5 了 , 阻断浏览器行为, 你再刷新
jevonszmx
2015-04-28 13:25:33 +08:00
说实话,如果你的内容更新频繁,静态化量又特别大的时候,可以考虑换其他方式,不要生成静态文件。

你这种思路的缺点是:更新内容靠用户发起,万一被别有用心的人知道或者出了什么bug,你的服务器分分钟要垮。。。

强烈推荐使用varnish来做页面缓存,替代静态化。

varnish可以配置强大的规则,比如:

正则指定某些url缓存300s

```
if (req.request == "GET" && (
(req.http.host ~ "^www.example.com" && req.url ~ "^/($|index\/index/|list/|detail/|index)"))) {
set beresp.ttl = 300 s;
}
```

某个二级域名下某些内容缓存时间更长:

```
if (req.http.host == "wap.example.com") {
if (req.url ~ "^(?i)/xml/android.xml"){
set beresp.ttl = 24h;
}
}

```

比起静态化,非常值得花精力去研究下varnish的。
haiyang416
2015-04-28 13:27:21 +08:00
PHP 在 Web 中只负责接收 HTTP 请求并返回 HTTP 响应,键盘行为跟它没有关系。
huigeer
2015-04-28 13:33:40 +08:00
骚年, 现在内存很便宜了, 搞啥静态页面啊。
几百万的静态页面管理更新, 也是很麻烦的事情
直接动态吧
Septembers
2015-04-28 13:55:11 +08:00
纯静态方案 已过时 参见: http://www.jianshu.com/p/0c233a30716c
yakczh
2015-04-28 14:07:34 +08:00
静态化适合详情页, 象分页列表,这种静态化以后,如果有新内容产生,有分页链接的html要全部重新生成一遍
tabris17
2015-04-28 14:24:18 +08:00
反向代理缓存
xzem
2015-04-28 14:36:48 +08:00
…页面插入个js文件,然后ajax请求php页面执行更新操作。
fangjinmin
2015-04-28 15:08:22 +08:00
smarty就是这样的方式的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/186948

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX