V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
luckylion
V2EX  ›  问与答

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

  •  
  •   luckylion · 2015-04-28 13:07:10 +08:00 · 2750 次点击
    这是一个创建于 3498 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  2015-04-28 15:05:29 +08:00
    使用$_SERVER解决,垃圾服务器内存相关的缓存无法考虑
    11 条回复    2015-04-28 15:08:22 +08:00
    996635
        1
    996635  
       2015-04-28 13:14:47 +08:00
    同过header 传个X-xxxxxx过去判断一下吧.
    ideaa
        2
    ideaa  
       2015-04-28 13:21:08 +08:00
    这个功能已经集成到了CrossPHP框架的注释配置中了,有兴趣可以看下框架的源码.
    justfindu
        3
    justfindu  
       2015-04-28 13:21:42 +08:00
    监控用户的键盘行为... 比如监控到 ctrl+f5 了 , 阻断浏览器行为, 你再刷新
    jevonszmx
        4
    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
        5
    haiyang416  
       2015-04-28 13:27:21 +08:00
    PHP 在 Web 中只负责接收 HTTP 请求并返回 HTTP 响应,键盘行为跟它没有关系。
    huigeer
        6
    huigeer  
       2015-04-28 13:33:40 +08:00
    骚年, 现在内存很便宜了, 搞啥静态页面啊。
    几百万的静态页面管理更新, 也是很麻烦的事情
    直接动态吧
    Septembers
        7
    Septembers  
       2015-04-28 13:55:11 +08:00
    纯静态方案 已过时 参见: http://www.jianshu.com/p/0c233a30716c
    yakczh
        8
    yakczh  
       2015-04-28 14:07:34 +08:00
    静态化适合详情页, 象分页列表,这种静态化以后,如果有新内容产生,有分页链接的html要全部重新生成一遍
    tabris17
        9
    tabris17  
       2015-04-28 14:24:18 +08:00
    反向代理缓存
    xzem
        10
    xzem  
       2015-04-28 14:36:48 +08:00 via Android
    …页面插入个js文件,然后ajax请求php页面执行更新操作。
    fangjinmin
        11
    fangjinmin  
       2015-04-28 15:08:22 +08:00
    smarty就是这样的方式的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2709 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:38 · PVG 18:38 · LAX 02:38 · JFK 05:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.