2013-10-01 48 views
0

我在外部PHP web應用程序中使用Joomla(1.5.26)認證。Joomla - framework.php unset my vars

我的問題是,包含的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 
+0

適合我。我的輸出是'string'toto'(length = 4)'。必須是其他事情出錯了 – Lodder

回答

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'