私に与えられたPHP Webサイトをホストしようとしています。この警告が表示されます:
警告:不明:スクリプトは、PHP 4.2.3。セッション拡張機能がグローバル変数を考慮しないことに注意してください。 register_globalsが有効になっていない限り、データのソースとしてこの機能とこの警告を無効にするには、それぞれsession.bug_compat_42またはsession.bug_compat_warnをオフに設定します。in nknown on line
これは何を意味するのでしょうか?コード内でこの問題の原因を追跡するにはどうすればよいですか?
基本的に、セッションと同じ名前の変数があります。例:
$_SESSION['var1'] = null;
$var1 = 'something';
このエラーを再現します。 PHPが既存の変数を見つけて、スクリプトに次の行を追加することでそれらについて警告するのを防ぐことができます。
ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);
これらの値はphp.iniまたは.htaccessでも設定できます
ここにいくつかの問題のある可能性があるようです:
http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect
このようなケースは言う:
$_SESSION['firstname']=$_REQUEST['firstname'];
警告をトリガーします。
さらに、このphpのバグの内容を解釈します: http://bugs.php.net/bug.php?id=41540 このエラーはまだ初期化されていない変数をセッションスーパーグローバルに割り当てた場合にも発生します。
//Start of script
$_SESSION['bob'] = $bob;
これは警告の原因を特定するのに役立つ情報ですが、オーエンが言及している警告を止めないことをお勧めします。これらのランタイム関数は PHP 5.4. で削除されており、開発者はこのような変数の使用を回避する慣行に入る必要があります。
これを修正するために、開発者側の苦痛かもしれませんが、
$_SESSION["user"]
$user;
セッションの名前を
$_SESSION["sessuser"];
または、セッション名と変数名が異なる限り、逆も同様です。このように考えてください。最新のビルドにアップグレードするときは、とにかくコードをデバッグする必要があります。
.htaccessに変更を加える場合、ini_setは機能しません。あなたはそれを次のようにする必要があります:
php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0
私の場合、php.iniがオンからオフに変更されます
このような :
session.bug_compat_42 = off
session.bug_compat_warn = off
動作しない場合は、Apacheを再起動します