【发布时间】:2011-11-15 02:38:56
【问题描述】:
我对 WinCache 有一个奇怪的问题,这可能不是最好的论坛。我检查了 SuperUser,但关于 WinCache 的结果为 0。整个网络的支持似乎很弱,但至少 SO 之前已经讨论过。
我在同一台服务器上有一个实时站点和一个开发站点(CakePHP 框架、Windows Server 2008 R2、IIS 7.5、PHP 5.3、FastCGI、WinCache 1.1)。 Live 站点位于 80 端口,dev 位于 81 端口。IIS 有两个网站,每个站点都指向 Inetpub\wwwroot 中的不同根文件夹。每个站点都在不同的应用程序池下运行。
在更改开发站点一段时间后,实时站点开始出错。经过一些痛苦的调试后,我发现发生了以下(完全蹩脚的)事件链:
- 实时 PHP 脚本在 GET 请求后正常加载
- 实时 PHP 脚本在用户选择后向自身发布正常
- 当表单参数不符合预期时,开发 PHP 脚本会处理 POST 请求和错误。
如果我通过端口 80(实时站点)下的 Web 界面检查 WinCache 属性,我会看到文档根目录是 Inetpub\wwwroot\Live - 正如预期的那样。但是,如果我查看文件缓存选项卡下的缓存文件列表,我会看到一些文件缓存了两次。鼠标悬停告诉我一个来自 Inetpub\wwwroot\Dev,另一个来自 Inetpub\wwwroot\Live。
这怎么可能?为什么 IIS 在 GET 请求中使用一个,而在 POST 中使用另一个?我知道 CakePHP 会根据格式化的 URL 选择要加载的文件,但处理路由的 index.php 文件位于 Inetpub\wwwroot\Live 中,因此可能永远无法请求不同文档根目录中的文件。在我看来,PHP 向 IIS 请求文件,但 IIS 在与 WinCache 通信时失去了它的弹珠。
到目前为止,我还没有看到任何方法可以为一个站点禁用 WinCache,但即使可以,我也可能不再信任它。
任何关于这个棘手问题的建议将不胜感激。
【问题讨论】:
标签: php caching cakephp-1.3