0

在 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,

这意味着什么?

4

3 回答 3

0

问题解决了!

我记得我前几次更改了 php.ini 中的一些设置,以提高 php 的性能。似乎导致此错误的设置似乎是 zend eaccelerator:

zend_extension = "C:\xampp\php\ext\php_eaccelerator_ts.dll"

我注释掉了那行,现在一切正常!

感谢所有提供帮助的人,这让我有动力解决这个问题:)

于 2013-06-04T19:57:11.330 回答
0

$conf->get('debug')正在返回一个空值。所以,$debug也是空的。结果setDebug()是非对象(空)。确保模型中存在 getDebug() 方法,如果存在,请检查模型是否与当前模块一起使用,或者是否使用了正确的模型。

如果是全新安装,则在此过程中可能会丢失部分相关代码。

于 2013-06-03T14:13:02.763 回答
0

createDbo()方法将失效或在连接出现问题时发出 500 内部服务器错误。它永远不应该返回非对象。

在第 308 行之后,插入

var_export(self::$database);
exit;

得到一个提示,数据库对象发生了什么。

您的输出var_export显示,有一个有效的数据库对象,所以从一开始的致命错误确实是有道理的。显然,问题要么是固定的,要么不是每次都发生。

要追踪它,请删除该exit行并重新运行请求。如果您再次遇到致命错误,则var_export输出应显示与 JDatabaseMysqli 对象不同的内容。

于 2013-06-04T10:44:56.283 回答