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 は、486 行目のJRequest::clean()メソッドでグローバル変数をクリーンアップします。libraries/joomla/environment/request.php

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 に答える