【发布时间】:2011-10-22 12:51:26
【问题描述】:
使用 PHP 5.3.x 运行 Debian Squeeze 服务器(Apache 和 nginx 都会发生)我看到随机出现的致命错误 undeclared static property。这通常指的是以下代码:
class aliro extends aliroBase {
private static $instance = null;
public static function getInstance () {
return self::$instance instanceof self ? self::$instance : (self::$instance = new self());
}
...
并声明aliro::$instance 在上面显示的最后一行未声明(不包括大括号)。然而,变量在前面几行就很清楚地声明了。 (确切的错误消息是“PHP 致命错误:访问未声明的静态属性:第 91 行 /var/www/apic/public_html/aliro.php 中的 aliro::$instance”)。
对于服务器的每个请求都会执行此代码,目前该服务器每小时运行大约 1,250 个请求。但错误似乎每小时发生一次。
同时,syslog 可能会显示 suhosin 错误消息:
Oct 22 11:29:45 apic suhosin[20764]: ALERT-SIMULATION -
canary mismatch on efree() - heap overflow detected at 0x2ec9118
或内核错误,如:
Oct 22 10:29:43 apic kernel: [83469.382141] php[9479] general protection
ip:6a8161 sp:7fffa270ec20 error:0 in php5[400000+6f9000]
或
Oct 22 09:29:45 apic kernel: [79871.245018] php[705]: segfault at 27f2298
ip 00007f24229e640e sp 00007fff13aca388 error 6 in
libc-2.11.2.so[7f2422968000+158000]
Cron 每五分钟运行一次以触发 munin-node,但错误每小时只发生一次。这可能是什么原因造成的?
由于不可重复,目前尚不清楚可以执行哪些操作,尽管错误会造成数据损坏的风险。有什么建议吗?
【问题讨论】:
-
您从 PHP 错误日志中得到的确切错误是什么?
-
您运行的是什么版本的 PHP 5.3 - 是最新的吗?
-
相同的代码在多台服务器上运行,不同的PHP 5.3.x版本,错误似乎与特定的PHP版本无关。
-
halfer:PHP 5.3.8-1~dotdeb.2 在一个(nginx)上,5.3.3-7+squeeze3 在另一个(apache)上。