0

我设计了一个使用简单缓存机制的样式表/javascript 文件捆绑器和压缩器。它只是将每个捆绑文件的时间戳写入文件并比较这些时间戳以防止再次重写“主文件”。这样,在修改了 CSS 或 JS 文件的应用程序更新(这里是我的网站)之后,单个请求只会再次触发一次缓存。然后,此请求以及所有其他请求将看到一个已编译的文件,例如 master.css?v=1234567。

问题是,在我的开发环境下,每个测试都通过了,集成效果很好,一切都按预期工作。但是,在我的暂存环境中,在使用 FastCGI 编译的 PHP5.3 的服务器上,我的缓存文件似乎会被无效数据重写,但只有在同一个浏览器没有请求时才会如此。

用例:

  • 我在 Linux 下的 Firefox 上提出了第一个请求。对于该浏览器上的所有其他请求,一切都按预期工作。
  • 一旦我在 Windows/Linux(IE7、IE8、Chrome 等)上发出请求,我的缓存文件就会获得无效数据,但仅限于在 FastCGI 下运行的暂存服务器上,而不是在开发中!
  • 在 Firefox 上运行另一个请求会正确地重新缓存文件。

然后我想知道,FastCGI 与它有什么关系吗?我认为浏览器的客户端甚至操作系统与服务器端代码没有任何关系。

我知道这个问题是抽象地描述的,但是粘贴任何具体的代码都会太重 IMO,但如果它可以解决我的问题,我会这样做。

我尝试过远程调试我的代码,发现一切仍在按预期工作,即使缓存文件被正确写入。我看到当错误发生时,文件被写入预期的数据,但在两秒后被无效数据重写 - 在 php 完成执行之后! -

有没有办法通过 PHP 函数禁用特定请求的 FastCGI 缓存?

4

1 回答 1

1

根据您的环境,您可以考虑在 Apache 中使用 .htaccess 解决一些问题,以便以常规 cgi 模式处理这些请求。这可以通过一个简单的 AddHandler 和直接指向 cgi 的 Action 来完成。这种假设您正在部署到某种共享托管环境,您无法直接访问 Apache 的配置。

由于 fastcgi 将进程持续了一段时间,因此在初始执行后它可能会在稍后的时间破坏文件是有道理的,尽管特定的错误可能是我无法理解的。

没什么帮助,我知道,但可能会给你一些想法......

编辑:这是我下面评论中的 .htaccess 代码

Options -Indexes +FollowSymLinks +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5.cgi
于 2010-07-02T16:55:02.487 回答