web-dev-qa-db-ja.com

PHPデータのソースとしてグローバル変数を使用したセッション副作用警告

私に与えられたPHP Webサイトをホストしようとしています。この警告が表示されます:

警告:不明:スクリプトは、PHP 4.2.3。セッション拡張機能がグローバル変数を考慮しないことに注意してください。 register_globalsが有効になっていない限り、データのソースとしてこの機能とこの警告を無効にするには、それぞれsession.bug_compat_42またはsession.bug_compat_warnをオフに設定します。in nknown on line

これは何を意味するのでしょうか?コード内でこの問題の原因を追跡するにはどうすればよいですか?

43
Zack Peterson

基本的に、セッションと同じ名前の変数があります。例:

$_SESSION['var1'] = null;
$var1 = 'something';

このエラーを再現します。 PHPが既存の変数を見つけて、スクリプトに次の行を追加することでそれらについて警告するのを防ぐことができます。

ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);

これらの値はphp.iniまたは.htaccessでも設定できます

99
Owen

ここにいくつかの問題のある可能性があるようです:

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;
6
Kzqai

これは警告の原因を特定するのに役立つ情報ですが、オーエンが言及している警告を止めないことをお勧めします。これらのランタイム関数は PHP 5.4. で削除されており、開発者はこのような変数の使用を回避する慣行に入る必要があります。

これを修正するために、開発者側の苦痛かもしれませんが、

$_SESSION["user"]
$user;

セッションの名前を

$_SESSION["sessuser"];

または、セッション名と変数名が異なる限り、逆も同様です。このように考えてください。最新のビルドにアップグレードするときは、とにかくコードをデバッグする必要があります。

5
Ian

.htaccessに変更を加える場合、ini_setは機能しません。あなたはそれを次のようにする必要があります:

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0
2
Praveen Kannan

私の場合、php.iniがオンからオフに変更されます

このような :

session.bug_compat_42 = off
session.bug_compat_warn = off

動作しない場合は、Apacheを再起動します

1
TARA