Php Smarty内部错误

Php Smarty内部错误,php,smarty,Php,Smarty,查看服务器PHP错误日志发现,某种类型的PHP通知出现的频率最高,这与Smarty有关。我发现这似乎描述了同样的错误,但实际上没有答案 通知如下:存在未定义的不同变量: PHP Notice: Undefined variable: is_admin in /usr/share/php/Smarty/sysplugins/smarty_internal_data.php on line 291 我想知道我怎么可能调试这个,因为没有提供像模板名称这样的数据 下面我将给你一些关于代码的想法,你可

查看服务器PHP错误日志发现,某种类型的PHP通知出现的频率最高,这与Smarty有关。我发现这似乎描述了同样的错误,但实际上没有答案

通知如下:存在未定义的不同变量:

PHP Notice:  Undefined variable: is_admin in /usr/share/php/Smarty/sysplugins/smarty_internal_data.php on line 291
我想知道我怎么可能调试这个,因为没有提供像模板名称这样的数据

下面我将给你一些关于代码的想法,你可以详细阅读这些代码,因为它们都是开源的

因此,在名为header.php的文件中创建了一个全局smarty对象,并且在同一个文件中设置了一些全局smarty变量,包括上面通知中的变量:

//init Smarty
require_once('Smarty.class.php');

$smarty = new Smarty();
...
$smarty->assign('is_admin', is_admin() ? 1 : 0);
然后,通过调用$smarty->display….将header.php包含在需要显示一些HTML的每个文件中。。。。因此,我假设在存在$smarty对象的任何文件中,该对象都有一个名为is_admin的变量。然而,情况似乎并非如此

此外,有关未设置变量的常规Smarty警告看起来有所不同:

PHP Notice:  Undefined index: sent_id in /var/www/smarty_dir/templates_c/a5aab2c66c44442365a39981ba9be18e0a1f11ad.file.history.tpl.cache.php on line 123
有什么想法吗

Upd。 我阅读了一些日志,发现当用户进入页面并获得302HTTP状态时,似乎会出现此类警告。这可能是由于以下代码位于smarty构造函数调用之后,但在分配变量之前:

//cookie check
if (!is_logged() && isset($_COOKIE['auth'])) {
    if ($user_id = check_auth_cookie()) {
        if (user_login('', '', $user_id, $_COOKIE['auth'])) {
            header("Location:".$_SERVER['REQUEST_URI']);
            return;
        }
    }
}
所以我想我应该在这个区块之后移动$smarty初始化,这可能会有所帮助。我仍然很好奇它与这个问题的关系。

'is_admin',is_admin您试图将函数is_admin作为变量{$is_admin}分配给Smarty模板,这在我看来是不可能的

将返回结果分配给变量,即:

$var = is_admin();
$smarty->assign('is_admin', $var);

我想我明白了。问题其实在代码中,包括

header("Location:".$_SERVER['REQUEST_URI']);
return;

我的错误是,在这种情况下,return的行为与exit不同,因为当您从一个文件调用return时,该文件是必需的或包含在另一个文件中,您只需将控件返回到另一个文件。我不知道这个功能。

错误。如果返回值是_admin,那么就指定返回值。我不这么认为。因为括号存在,所以应该使用函数调用的结果。不可能。它将分配函数返回的值,与您刚才将返回值分配给$var的方式相同。那么,如果函数被声明,为什么会出现未定义变量的错误?assign是否实际将值分配给$is_admin,或者它是否创建了Smarty的内部内容?在header.php中,您分配了许多变量,例如,是否记录、只读、目标、用户权限等。smarty是否可以查看此变量?是的,至少没有关于其他变量的类似警告。然而,$is_admin可能是templatesTry中最常用的清除smarty缓存的方法,它只需删除smarty缓存目录中的所有内容即可。是的,已经这样做了。我们要看看这是否有帮助。嗯,似乎没有帮助。