我发现错误的一个常见原因是从异常处理程序中抛出异常。我很确定这不会发生在我正在尝试调试的应用程序中......但是我已经将所有初始化处理行放在 index.php 的顶部的 try/catch 中。*
这显然也可能发生,因为有些事情不能序列化 以存储在 session 中。这个应用程序最多将数组存储到会话中(相当多),但我相信它不会在其中存储任何不寻常的东西。
有人评论说这发生在他们身上,因为他们的主键需要是 CHAR(32) 而不是 INT(11)。这个应用程序中的PK都是INT。
其他建议是,它可能是在 5.3.6 中修复的PHP 5.3.3 的问题、完整磁盘以及需要对 SimpleXML 值进行类型转换的问题。我们确实正在运行 PHP 5.3.3,但在这种情况下升级必须是最后的手段。它并不总是这样做。
更新/注意:我自己实际上无法重现错误,只能在日志中看到它发生,请参阅下面的段落了解我认为错误发生的位置......
* 从错误日志来看,它似乎至少发生在一个地方是 index.php。我推断这一点只是因为它在某些条目中由引用 URL 指示。try/catch 代码目前仅围绕脚本的“顶部”初始化部分,其下方主要是 HTML 输出。输出中有一些 PHP 代码(虽然很简单),所以我可能需要对其进行测试。这是捕获部分,它不会在日志中产生任何输出:
} catch (Exception $e) {
error_log(get_class($e)." thrown. Message: ".$e->getMessage(). " in " . $e->getFile() . " on line ".$e->getLine());
error_log('Exception trace stack: ' . print_r($e->getTrace(),1));
}
真的很感激这方面的任何提示!
编辑:PHP 作为 Apache 模块运行(服务器 API:Apache 2.0 处理程序)。我认为没有使用任何 PHP 加速器,但可能只是我不知道如何判断。维基百科上列出的没有一个在 phpinfo() 中。
据我所知,MPM 是 prefork。这是我第一次研究 MPM:
# ./httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c