PHP 如何不缓存生成的 HTML,而是缓存静态数据,如 images/js/css


PHP How to not cache generated HTML but cache static data like images/js/css

许多PHP开发人员在他们的PHP页面顶部添加了无缓存标头,我也是,原因很明显。由于 PHP 生成的内容通常是动态的,因此让浏览器缓存它们会导致向用户呈现过时的数据。为了避免这种缓存,通常会被禁用。

<?php
    //no  cache headers 
    header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
?>

问题是由于这个标头,我的图像,javascript文件和css文件也是静态的,因此可以(并且应该)缓存,也没有被缓存。这会大大减慢网站的速度。

有没有办法在PHP内容上没有缓存,但仍然缓存了js/images/css?

假设我有完全访问权限来修改(linux)服务器配置,HTACCESS,当然还有PHP文件本身,如何实现这一点?

还是整个"无缓存的事情"对于动态PHP文件是不必要的?即使它们被 url 重写为看起来没有扩展名。

我可能是错的,但我相信您可以将所有 js 和 CSS 文件放入一个 php 中,然后使用类似的东西进行缓存

ob_start ("ob_gzhandler");
ob_start("compress");

因此,您将有一个定义其标头的.php,然后对您的js和css文件以及上述文件有一些要求。

您可能需要几个 if 语句来获取更改等。

我将在我现在在手机上的几个中做出更全面的答案。


更新

在 git 上找到了一个资源,我认为它将帮助您走上正确的道路。

https://github.com/SubZane/CSS-Compressor/blob/master/csscompressor.php

您可以使用

htAccess 来定义要缓存的文件您想要的只是在网站的主目录中创建一个.htaccess文件并添加此代码

例:

# cache images/pdf docs for 1 week
<FilesMatch "'.(ico|pdf|jpg|jpeg|png|gif)$">
  Header set Cache-Control "max-age=604800, public, must-revalidate"
  Header unset Last-Modified
</FilesMatch>
# cache html/htm/xml/txt diles for 2 days
<FilesMatch "'.(css|js)$">
  Header set Cache-Control "max-age=172800, must-revalidate"
</FilesMatch>