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

时间:2015-06-16 09:57:00

标签: javascript php css image caching

许多PHP开发人员在他们的PHP页面之上添加no-cache标头,我也是如此,原因显而易见。由于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文件本身,那么如何实现呢?

或者是整个&#34;无缓存的东西&#34;动态PHP文件是不必要的?即使它们被重写为url,也显示无扩展。

2 个答案:

答案 0 :(得分:2)

我可能是错的,但我相信你可以把你所有的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

答案 1 :(得分:0)

您可以使用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>