3

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

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

<?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();
?>

根路径配置得很好,一切似乎都正常,我可以使用网站上的数据和这样的代码(示例):

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();
}

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

然而,问题是当我尝试使用一个函数时:

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']."</b>. [ Log out ]";
        }
        else return "Hello, ".$user->data['username'].". [ Log out ]";
    }
}

如果我这样做,即使函数在包含 phpbb.php 的页面上,甚至在 phpbb.php 本身内部,会话也不会被识别,结果将始终是:

你好, 。[ 登出 ]

为什么我定义的函数不能访问 phpBB 数据?

4

1 回答 1

3

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

<?php
$a = 2;

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

将不起作用,并且

<?php
$a = 2;

function test() {
  global $a;

  echo $a;
}
?>

将工作。

为了让你的函数工作,你必须在里面声明全局变量:

function print_login() {
    global $user;

    if ($user->data['user_id'] == ANONYMOUS)
    {
        return "Not currently logged in. [ Log in ]";
    }
...
于 2013-06-08T13:56:23.080 回答