我在Xampp 1.8.1上全新安装Joomla 2.5.11后出现此错误:
致命错误:在第309行的C:\ xampp \ htdocs \ mysite.com \ libraries \ joomla \ factory.php中的非对象上调用成员函数setDebug()
该文件中的代码如下所示:
300 public static function getDbo()
301 {
302 if (!self::$database)
303 {
304 //get the debug configuration setting
305 $conf = self::getConfig();
306 $debug = $conf->get('debug');
307
308 self::$database = self::createDbo();
309 self::$database->setDebug($debug);
310 }
311
312 return self::$database;
313 }
我在安装之前创建了数据库,如果我查看它,我可以看到所有joomla表都是在安装过程之后创建的;所以它似乎与数据库连接问题无关。那么,它会是什么?
注意: 我从官方的Joomla网站上检查了两次下载,我确信包已正确下载。
的更新 刚试过Joomla 2.5.9并得到了同样的错误。我的环境似乎有些问题(但只有Joomla,Drupal工作正常!)
更新2: * 关注@nibra建议,我把*
var_export(self::$database);
exit;
在第308行之后。
**输出如下:
JDatabaseMySQLi::__set_state(array( 'name' => 'mysqli',
'nameQuote' => '`',
'nullDate' => '0000-00-00 00:00:00',
'dbMinimum' => '5.0.4',
'database' => 'psychology',
'connection' => mysqli::_set_state(array( 'affected_rows' => NULL,
'client_info' => NULL,
'client_version' => NULL,
'connect_errno' => NULL,
'connect_error' => NULL,
'errno' => NULL,
'error' => NULL,
'error_list' => NULL,
'field_count' => NULL,
'host_info' => NULL,
'info' => NULL,
'insert_id' => NULL,
'server_info' => NULL,
'server_version' => NULL,
'stat' => NULL,
'sqlstate' => NULL,
'protocol_version' => NULL,
'thread_id' => NULL,
'warning_count' => NULL,
)),
'count' => 0,
'cursor' => NULL,
'debug' => false,
'limit' => 0,
'log' => array ( ),
'offset' => 0,
'sql' => NULL,
'tablePrefix' => 'fqd1p_',
'utf' => true,
'errorNum' => 0,
'errorMsg' => NULL,
'hasQuoted' => false,
'quoted' => array ( ),
))
更新3: 注释退出后的输出:
JDatabaseMySQLi::__set_state(array( 'name' => 'mysqli',
'nameQuote' => '`',
'nullDate' => '0000-00-00 00:00:00',
'dbMinimum' => '5.0.4',
'_database' => 'psychology',
'connection' => mysqli::__set_state(array( 'affected_rows' => NULL,
'client_info' => NULL,
'client_version' => NULL,
'connect_errno' => NULL,
'connect_error' => NULL,
'errno' => NULL,
'error' => NULL,
'error_list' => NULL,
'field_count' => NULL,
'host_info' => NULL,
'info' => NULL,
'insert_id' => NULL,
'server_info' => NULL,
'server_version' => NULL,
'stat' => NULL,
'sqlstate' => NULL,
'protocol_version' => NULL,
'thread_id' => NULL,
'warning_count' => NULL,
)),
'count' => 0,
'cursor' => NULL,
'debug' => false,
'limit' => 0,
'log' => array ( ),
'offset' => 0,
'sql' => NULL,
'tablePrefix' => 'fqd1p_',
'utf' => true,
'errorNum' => 0,
'errorMsg' => NULL,
'hasQuoted' => false,
'quoted' => array ( ),
))
嗯,有一点不同:
'_database' => 'psychology',
'connection' => mysqli::__set_state(array( 'affected_rows' => NULL,
而不是
'database' => 'psychology',
'connection' => mysqli::_set_state(array( 'affected_rows' => NULL,
这意味着什么?
答案 0 :(得分:0)
$conf->get('debug')
返回一个空值。所以,$debug
也是空的。结果setDebug()
变为非对象(空)。确保模型中存在方法getDebug(),如果存在,请检查模型是否与当前模块一起使用,或者模型是否正确用过的。
如果是全新安装,则在此过程中可能会丢失相关代码的某些部分。
答案 1 :(得分:0)
createDbo()
方法将因连接问题而死亡或发出500内部服务器错误。它永远不会返回非对象。
在第308行之后,插入
var_export(self::$database);
exit;
获取提示,数据库对象发生了什么。
var_export
的输出显示, 是一个有效的数据库对象,因此从一开始的致命错误确实有意义。显然,问题要么是固定的,要么不是每次都出现。
要追踪它,请删除exit
行并重新运行请求。如果再次收到致命错误,var_export
输出应显示与JDatabaseMysqli对象不同的内容。
答案 2 :(得分:0)
问题解决了!
我记得我前几次改变了php.ini中的一些设置,以提高php的性能。 似乎负责此错误的设置似乎是zend eaccelerator:
zend_extension = "C:\xampp\php\ext\php_eaccelerator_ts.dll"
我注意到这一行,现在一切正常!
感谢所有帮助过的人,这让我有动力解决这个问题:)