【问题标题】:Cache PHP page that echoes CSS code缓存响应 CSS 代码的 PHP 页面
【发布时间】:2014-11-22 04:34:06
【问题描述】:

按照接受的答案here on SO,我正在尝试创建一个可使用 PHP 编辑的样式表。

发生了什么事...

我正在尝试将样式表(名为 css.php)缓存在用户的浏览器中,这样他/她就不必在每次页面加载时都加载它,并设置了以下标题:

header('Content-Type: text/css;;charset=UTF-8');
header('cache-control: max-age=86400;');
header('Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT;');
header('Expires: Sat, 22 Nov 2014 16:00:00 GMT;');
header('cache-control: max-age=86400;');

这些是默认发送的其他标头:

Connection:"Keep-Alive"
Content-Encoding:"gzip"
Content-Length:"393"
Date:"Fri, 21 Nov 2014 17:00:50 GMT"
Keep-Alive:"timeout=5, max=99"
Server:"Apache"
Vary:"Accept-Encoding"
X-Frame-Options:"SAMEORIGIN"

但是,在加载多次引用 css.php 页面的页面时,它会继续每次都重新加载 CSS 页面。

我怎么知道...

每次我在我的 apache 服务器访问日志中加载使用样式表的页面时,我都会收到对 css.php 页面的点击。

我可以看到我的 Firefox 浏览器正在访问 Inspect Element 工具中的 css.php 页面。它每次都收到HTTP 200

我该怎么办?

【问题讨论】:

  • 需要提前设置headers过期时间。您今天设置它,浏览器通常会缓存 css,当有人更改 css 并且浏览器具有缓存版本时通常会出现问题,因此更改不会显示,这是倒退...
  • 今天是 21 号。另外,这里的 CSS 没有正常缓存,因为它伪装成 PHP 文件。
  • 即使项目被缓存,接收 HTTP 200 也是正常的。您需要查找的是(from cache),它显示在 Chrome DevTools 的大小/内容列中(不知道 firefox)。另请记住,大多数开发工具默认禁用该缓存,您可能需要取消选中 disable cache 复选框(在 chrome 中,它位于网络面板的顶部)
  • @billy 别担心,我也失去了几天... :)
  • 当我在评论框中写字时,页面被向下滚动,因此无法同时看到 tp 框..注意自己,正确阅读问题....

标签: php html css apache http


【解决方案1】:

不要创建动态 CSS 文件,而是每次使用 PHP 的 file_put_contents() 函数更改标准文件。

例子:

 file_put_contents("styles.css", $css_input);

这样,浏览器会像往常一样缓存文件。

例子:

<link rel="stylesheet" type="text/css" href="styles.css"/>

当您更改实际的 CSS 时,浏览器会在重启时自动加载新的。

【讨论】:

  • 这在某种程度上是一种解决方法......但同样可以完成工作!谢谢:)
猜你喜欢
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2018-11-08
  • 2012-11-23
  • 1970-01-01
  • 2014-03-07
  • 2018-02-17
相关资源
最近更新 更多