我正在使用PHPBB3 3.0.12,我有一个脚本可以自动登录,如下所述:
这是我的剧本
<?php
login();
function login(){
define('IN_PHPBB', true);
$phpbb_root_path = pathNLP() . 'forum/'; //the path to your phpbb relative to this script
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . "common.php"); ////the path to your phpbb relative to this script
include($phpbb_root_path . "includes/functions_user.php");
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
$username = "testuser"; $password = "1";
if(isset($username) && isset($password))
{
$result=$auth->login($username, $password, true);
if ($result['status'] == LOGIN_SUCCESS) {
echo "You're logged in";
}
}
}
这曾经在我的webhoster上工作。我正在使用XAMPP在我的本地PC上尝试此脚本,但是我收到以下错误:
Fatal error: Call to undefined method mysqli::sql_query() in /home/adam/www/mysite/forum/includes/cache.php on line 51
实际上,在cache.php
的第51行,我找到了命令sql_query
:
global $db
// ...
$sql = 'SELECT config_name, config_value, is_dynamic
FROM ' . CONFIG_TABLE;
$result = $db->sql_query($sql); //<--line 51
我认为问题是global $db
行,我猜$db
不应该是mysqli对象,因为它没有sql_query
方法。根据{{3}}的引用(感谢Patrik Q的链接),有人说:
phpbb3中存在设计错误。他们使用全球$ db EVERYWHERE 而不是使用单例作为db对象。在我的情况下的问题 是我把这个代码放在一个类中。 [...]在我的情况下我 只是将该代码移到了类之外并复制了该类中的变量 构造
由于这个引用,我试图将脚本调用到一个函数内 - 而且令我惊讶的是它有效!但是,我需要从函数中调用它。我不明白为什么global $db
在将它放入函数时会出现问题。如何使脚本在函数内部工作?这是工作代码:
<?php
define('IN_PHPBB', true);
$phpbb_root_path = pathNLP() . 'forum/'; //the path to your phpbb relative to this script
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . "common.php"); ////the path to your phpbb relative to this script
include($phpbb_root_path . "includes/functions_user.php");
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
$username = "testuser"; $password = "1";
if(isset($username) && isset($password))
{
$result=$auth->login($username, $password, true);
if ($result['status'] == LOGIN_SUCCESS) {
echo "You're logged in";
}
}
如何在方法中使用此脚本?