在生产中突然出现“试图获取非对象属性”的PHP错误

时间:2013-08-02 02:25:12

标签: php apache lamp

我们有一个生产Linux,Apache,PostgreSQL,PHP设置,突然开始在我们的应用程序中的多个点以及看似随机的间隔中吐出这个错误。生产中的代码尚未更新7周,更新是对PHP 5.3的升级(兼容性相关代码更改)。

我昨天重新启动了Apache,错误似乎不那么频繁,但又开始了(并且变得非常规律)。我昨天也禁用了APC模块,这似乎运行得很好,但现在错误再次出现。

我很困惑,因为代码没有改变,错误出现在奇怪的地方,例如。

function __destruct() {
    if ($this->startTransaction) <<< exception here
        $this->connection->commitTransaction();
}

if (!is_null($this->timestamp)) { << exception here, timestamp is a private variable

如果对象本身正在调用它,那么$如何成为非对象?

突然出现这些错误的原因是什么?以下是top的记忆统计数据:

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   6285148k total,  5794020k used,   491128k free,   332644k buffers
Swap:  1048568k total,      764k used,  1047804k free,  4671488k cached

1 个答案:

答案 0 :(得分:0)

这是由https://bugs.php.net/bug.php?id=50027引起的,并通过将PHP升级到更高版本来解决(5.3.4中修复了错误,而5.3.3是debian中的包)。