本地LAMP堆栈,防止PHP缓存动态加载的页面


Local LAMP stack, prevent PHP from caching dynamically loaded pages

我有一个运行在Linux上的本地LAMP堆栈。我有通常的Apache/PHP/mySQL的东西,一切工作正常从本地主机。

我在服务器上有一个显示树视图的小应用程序。它列出了在本地(在服务器上)找到的一系列文档。可以通过在树中单击这些文件来查看它们,然后将它们加载到页面上的DIV中。可以使用我在应用程序中编写的简单编辑器编辑这些文件。

问题是PHP(我假设)在加载这些文档时缓存它们,这意味着当用户编辑它们时,尽管它们被保存,但当它们在树中重新选择时,显示的是缓存的版本,而不是新编辑的版本。

应用程序的初始页面是一个标准的HTML页面,但我已将其重命名为PHP,并将以下代码添加到该页面的顶部:

<?php
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");
?>

不幸的是,虽然这似乎可以防止主页被缓存,但它并不能阻止那些在应用程序的一般使用过程中动态加载的文件。

是否有任何方法可以防止PHP(仍然假设它是PHP)缓存这些动态加载的本地文件?

您混淆了操作码缓存和浏览器缓存。你所设置的标头与PHP无关,它们是影响浏览器缓存的http标头。PHP将(如果它与APC或类似的设置正确)缓存操作码,这与您的问题无关。

当你下载文件到客户端进行编辑时,你必须在文件上设置缓存头,以防止客户端(浏览器)缓存它们。

每个下载(css文件,js文件,无论什么文件)都是一个单独的http请求,因此有自己的头集。因此,如果您设置自定义的每个请求头,您将不得不为每个这样的请求设置它们。在您的情况下,一个更简单的解决方案是在Apache配置级别上添加这些头文件。

Apache Header指令很容易使用,你几乎可以在Apache配置链的任何地方使用它。这意味着。haccess, vhost配置或通用apache配置。如何解决这个问题取决于您和您的服务器环境。

在。htaccess中添加标题的示例如下:

Header set Cache-control "max-age=0, no-store"

或者如果您希望仅为某些文件类型设置某些头:

<FilesMatch "'.(gif)$" >
    Header set Cache-control "max-age=0, no-store"
</FilesMatch>