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

问题是,在我的开发环境下,每个测试都通过,集成运作良好,一切都按预期运行。但是,在我的登台环境中,在使用FASTCGI编译的PHP5.3的服务器上,我的缓存文件似乎会被无效的数据重写,但仅当未从同一浏览器请求时。

用例:

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

那时我想知道,Fastcgi与它有关系吗?我认为浏览器的客户端甚至操作系统与服务器端代码无关。

我知道这个问题是抽象描述的,但是粘贴任何具体代码都太重了,但是如果可以清除我的问题,我会做的。

我尝试过远程调试我的代码,发现所有内容仍然按预期工作,即使缓存的文件也正确编写。我看到,当错误发生错误时,文件将使用预期的数据编写,但是在两秒钟后,PHP完成执行后,将用无效的数据重写! -

是否有一种方法可以通过PHP功能禁用FASTCGI缓存以获取特定请求?

有帮助吗?

解决方案

根据您的环境,您可以考虑使用.htaccess在Apache中使用.htaccess以常规CGI模式为这些请求服务。这可能只会通过一个简单的Addhandler和直接指向CGI的动作来完成。这种假设是您将部署到某种共享的托管环境中,您无法直接访问Apache的配置。

由于FastCGI在一定时间内持续了该过程,因此在初始执行后的稍后点可能会在文件中抓住文件,尽管特定的错误可能超出了我。

我知道没有太多帮助,但可能会给您一些想法...

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

Options -Indexes +FollowSymLinks +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5.cgi
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top