■■ 以下のエラーを検証する ■■
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
PHP バージョンが 4.2.3 とそれ以前には、たとえ register_globals が無効の場合でもグローバルスコープでセッション変数の初期化を 許してしまうドキュメント化されていない特徴/バグがあります。 この機能を使用している場合で session.bug_compat_warn も有効にしている場合、 PHP 4.3.0 とそれ以降のバージョンでは警告が発されます。 この特徴/バグは、 以下のディレクティブを無効にすることで無効にすることが可能です。
session.bug_compat_42
session.bug_compat_warn
上記の「この機能を使用している場合」に相当しているかどうかを PHPがどんな条件で判断しているかを6つのケースから考える。
●エラーが出ない[case1.php]
($_SESSIONのキーとグローバル変数が違う場合)
<?php
session_start();
$bbb = $_GET[‘abc’];
$_SESSION[‘aaa’] = $bbb;
?>
●エラーが出ない[case2.php]
($_SESSIONのキーとグローバル変数が同じ場合でも、外部からの変数を受け取っていない場合)
<?php
session_start();
$aaa = ‘abc’;
$_SESSION[‘aaa’] = $aaa;
?>
●エラーが出る[case3.php]
($_SESSIONのキーとグローバル変数が同じ場合で、かつ、外部からの変数を受け取っている場合)
<?php
session_start();
$aaa = $_GET[‘abc’];
$_SESSION[‘aaa’] = $aaa;
?>
●エラーが出る[case4.php]
($_SESSIONのキーとグローバル変数が同じ場合で、その$_SESSIONが外部からグローバル変数とは関係ない外部変数を受け取っている場合)
<?php
session_start();
$aaa = ‘abc’;
$_SESSION[‘aaa’] = $_GET[‘abc’];
?>
●エラーが出る[case5.php]
($_SESSIONのキーとグローバル変数が同じ場合で、その$_SESSIONが外部からグローバル変数とは関係ない外部変数を別のグローバル変数を介して受け取っている場合)
<?php
session_start();
$aaa = ‘abc’;
$bbb = $_GET[‘abc’];
$_SESSION[‘aaa’] = $bbb;
?>
●エラーが出ない[case6.php]
($_SESSIONのキーとグローバル変数が同じものがある場合で、その$_SESSIONとは別の$_SESSIONが外部変数を受け取っている場合)
<?php
session_start();
$aaa = ‘abc’;
$bbb = $_GET[‘abc’];
$_SESSION[‘aaa’] = $aaa;
$_SESSION[‘ccc’] = $bbb;
?>
●結論(エラーが出る条件)
①$_SESSIONのキーと同じ名前のグローバル変数がある
例) $_SESSION[‘aaa’] と $aaa
②その$_SESSIONが間接的、直接的を問わず、何らかの外部変数を読み込んでいる
例1) $_SESSION[‘aaa’] = $_GET[‘abc’];
例2)
$bbb = $_GET[‘abc’];
$_SESSION[‘aaa’] = $bbb;
●回避策
php.iniの以下のディレクティブをOffにする
session.bug_compat_42
session.bug_compat_warn
最近のコメント