【问题标题】:WinCache caching incorrect CakePHP filesWinCache 缓存不正确的 CakePHP 文件
【发布时间】: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 中的不同根文件夹。每个站点都在不同的应用程序池下运行。

在更改开发站点一段时间后,实时站点开始出错。经过一些痛苦的调试后,我发现发生了以下(完全蹩脚的)事件链:

  1. 实时 PHP 脚本在 GET 请求后正常加载
  2. 实时 PHP 脚本在用户选择后向自身发布正常
  3. 当表单参数不符合预期时,开发 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


    【解决方案1】:

    我没有问题。

    试试这个: 使用 Wincache 1.2(测试版)

    不要使用“。”在 AppPool 名称中。

    (可选)为每个 AppPool 创建一个 ProcessUser。

    在我们的会话目录中查找名为“wincache_session_*”的会话文件。

    从每个 web 目录中的“[AppDir 86]\IIS[Wincache]\wincache.php”复制 wincache.php 并通过 http 打开它。

    【讨论】:

    • 感谢您的意见,但鉴于此问题的存在并导致了实际问题,我希望有一些 cmets 了解您为何建议上述步骤,以及它们可能如何影响我所看到的问题。我目前没有使用 WinCache,因为它风险太大 - 站点配置由 PHP 文件处理,因此存在将开发数据放入实时数据库的风险。如果我再次使用 WinCache,它仍然会出现同样的问题,我可能会很长时间看不到证据。
    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2012-01-04
    • 2015-05-12
    • 2021-04-30
    • 1970-01-01
    相关资源
    最近更新 更多