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

Javascript PHP如何不缓存生成的HTML,而是缓存静态数据,如image/js/css,javascript,php,css,image,caching,Javascript,Php,Css,Image,Caching,出于显而易见的原因,许多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") . " G

出于显而易见的原因,许多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上找到了一个资源,我认为这将帮助您走上正确的道路


您可以使用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>
#将图像/pdf文档缓存一周
标题集缓存控制“最大年龄=604800,公共,必须重新验证”
上次修改未设置的标题
#将html/htm/xml/txt diles缓存2天
标题集缓存控制“最大年龄=172800,必须重新验证”

您已经有了
标题(“Expires:Mon,1990年7月26日05:00:00 GMT”)对吗?是的,正如我发布的,为什么?对不起,我弄糊涂了。不要介意我的评论!也许是这根线@GillesLesire看看这个也许?我想他知道,他只是想用php来做。是的,我已经这样做了,但感觉很粗糙。我只是想知道是否有一个更干净的方法存在。谢谢,合并这些静态文件将大大加快速度,这也是我正在研究的问题。这可能会一次解决所有这些问题。我一定会调查的。很高兴你的朋友分类。你的解决方案适用于js和css文件,但对于图像,我想我仍然需要使用mohamed amin的解决方案。让我考虑一下图像,然后再与你联系