0

我在外部 PHP Web 应用程序中使用 Joomla (1.5.26) 身份验证。

我的问题是包含的 joomla 文件“framework.php”取消了之前定义的任何变量。

// some code
$varfoo = 'toto';

define( '_JEXEC', 1 );
define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']);
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php');
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php');

// authentification code

var_dump($varfoo); // NULL

我可以在定义任何变量之前包含 Joomla,但我想知道行为是否正常或者我做错了什么。

谢谢

我制作了一个测试文件

define( '_JEXEC', 1 );
define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']);
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php');
$varfoo = 'toto';
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php');
var_dump($varfoo); // NULL
4

1 回答 1

1

Joomla 1.5.x 清除JRequest::clean()方法中的全局变量libraries/joomla/environment/request.php,第 486 行:

foreach ($GLOBALS as $key => $value)
{
    if ( $key != 'GLOBALS' ) {
        unset ( $GLOBALS [ $key ] );
    }
}

如果您确实需要保留一些全局变量,可以将它们存储在静态类变量中。

class Foo {
    public static $data;
}

Foo::$data = new stdClass();

Foo::$data->bar = 'toto';

require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php');
var_dump(Foo::$data->bar); // 'toto'
于 2013-10-01T17:36:29.967 回答