【问题标题】:CakePHP Internal Server Error only for some users, gone after clearing cacheCakePHP 内部服务器错误仅适用于某些用户,清除缓存后消失
【发布时间】:2018-02-19 11:59:09
【问题描述】:

我的一些使用 Google Chrome 或 Firefox 的用户遇到内部服务器错误,一旦他们为我的网站清除缓存,错误就会消失。一年多前我遇到过这个问题,但切换到不同的主机“修复”了它,但现在问题又回来了。

这是最近发生的事情(不确定是否有任何一个,全部或都没有导致它):

  • 升级 CakePHP(从 2.8.9 到 2.10.7)
  • 将 PHP 配置从默认的 php5.6 + CLI 和专用于 Web 角色的 php7.0 更改为 php 7.0(这是防止 fpm​​ 进程的套接字在重新启动时碰撞和崩溃服务器所必需的)

当然,我可以告诉我的用户清除他们的缓存,但我也想了解可能导致这种情况的原因或可能导致这种行为的可能性(调试起来非常困难,因为只有部分用户受到影响)。

【问题讨论】:

  • 如果是服务器错误,请检查您的日志,如果您没有任何启用日志记录。在这里问这个问题或多或少毫无意义,而不仅仅是说发生了服务器错误,它可能是任何事情。如果以前没有发生过并且您的环境发生了变化,那么这与环境有关。

标签: cakephp internal-server-error fpm


【解决方案1】:

1 - 检查您的日志。如果没有任何错误日志,则在您的服务器上启用日志记录。查看 https://book.cakephp.org/3.0/en/core-libraries/logging.html 以使用 CakePHP 日志记录,或查看您的服务器的文档以在您的服务器上启用日志记录。

2 - 您可以尝试使用 try/catch 块将错误回显给用户,然后用户可以为您提供更具体的错误消息。进入主 PHP 文件并将所有内容包装在

try { 
  ...... (your PHP code here) ......
} catch(Exception $e) {
   die($e->getMessage());
}

如果错误与 PHP 可以捕获的异常有关,则错误消息将回显给用户。如果您不想将其回显给用户(可能存在一些安全问题),那么您可以将$e->getMessage() 写入日志文件,以便只有您可以看到它。

【讨论】:

    【解决方案2】:

    似乎是 PHP 会话出错:

    • 用户清除cookies时修复,PHP版本更新时可能出现。

    • 一些会话错误仅在确定的时间后发生,并且可能更加随机。

    • 它可能出现在代码的任何位置(这会使调试更加困难!)。

    • 在您更改主机时已修复。(新服务器意味着新的或默认会话配置)

      修改您的 PHP 会话配置和 CakePHP 会话配置(可能将其添加到问题中可能会有所帮助)。 ¿ 你使用的是 Memcached 还是类似的?

    【讨论】:

    • 是的,我正在使用 Memcached(我可能在以前的主机上也使用过它,尽管我不确定我是否 100% 使用过)。
    • 检查您是否已正确配置 php 以使用 memcached。如果您使用的是“memcached”或“memcache”(它们是不同的工具),请注意。在安装 memcached 并将 php 配置为使用 memcache 后,我遇到了类似的错误。检查这是否是错误的一种简单模式是将会话配置更改为默认模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    相关资源
    最近更新 更多