关于php:phpBB会话集成:在函数中使用数据

phpBB session integration: using data in function

我正在尝试将phpBB3会话和数据集成到外部网站中。我已经遵循了官方资源,也阅读了一些有用的提示,但是还没有找到解决问题的具体方法。

在我的网站中,我包含一个phpbb.php,其中包含以下代码:

1
2
3
4
5
6
7
8
9
10
11
<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../../forums/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>

根路径配置正确,一切似乎正常,我可以通过以下代码使用网站上的数据(示例):

1
2
3
4
5
6
7
8
9
10
11
12
13
if ($user->data['user_id'] == ANONYMOUS)
{
    $tpl = new USPTemplate();
    $tpl->load("error_nologin.tpl");
    $tpl->display();
}
else
{
    $tpl = new USPTemplate();
    $tpl->load("review_submit.tpl");
    $tpl->assign("test",'Thanks for logging in, ' . $user->data['username']);
    $tpl->display();
}

这将根据用户是否登录到论坛来使用我正在使用的模板系统加载不同的模板,如果用户已经登录,则还会打印其用户名。所有这些都很好。

问题是,当我尝试使用函数时:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function print_login() {
    if ($user->data['user_id'] == ANONYMOUS)
    {
        return"Not currently logged in. [ Log in ]";
    }
    else
    {
        if ( $user->data['user_colour'] != null)
        {
            return"Hello, <b style="color: #".$user->data['user_colour']."">".$user->data['username'].". [ Log out ]";
       }
        else return"Hello,".$user->data['username'].". [ Log out ]";
    }
}

如果执行此操作,即使该函数位于包含phpbb.php的页面上,或者甚至位于phpbb.php本身内,则该会话也不会被识别,结果始终为:

Hello, . [ Log out ]

为什么我定义的函数无法访问phpBB数据?


PHP变量必须引用全局变量,因为

1
2
3
4
5
6
7
<?php
$a = 2;

function test() {
  echo $a;
}
?>

将不起作用,并且

1
2
3
4
5
6
7
8
9
<?php
$a = 2;

function test() {
  global $a;

  echo $a;
}
?>

将起作用。

为了使函数正常工作,必须在其中声明全局变量:

1
2
3
4
5
6
7
8
function print_login() {
    global $user;

    if ($user->data['user_id'] == ANONYMOUS)
    {
        return"Not currently logged in. [ Log in ]";
    }
...