编程语言
首页 > 编程语言> > phpBB会话集成:在函数中使用数据

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

作者:互联网

我正在尝试将phpBB3会话和数据集成到外部网站中.为此,我遵循了official resource,也阅读了一些helpful tips,但是我还没有找到针对我的问题的具体解决方案.

进入我的网站,我包含一个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本身内,该会话也不会被识别,结果始终是:

Hello, . [ Log out ]

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

解决方法:

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 ]";
    }
...

标签:integration,phpbb,session,php,function
来源: https://codeday.me/bug/20191123/2065674.html