43

提供されたPHPWebサイトをホストしようとしています。この警告が表示されます:

警告:不明:スクリプトは、PHP4.2.3まで存在していたセッションの副作用に依存している可能性があります。register_globalsが有効になっていない限り、セッション拡張機能はグローバル変数をデータのソースとは見なさないことに注意してください。この機能とこの警告を無効にするには、session.bug_compat_42またはsession.bug_compat_warnをそれぞれオフに設定します。0行目の不明

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

4

5 に答える 5

99

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

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

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

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

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

于 2008-10-06T16:51:01.937 に答える
6

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

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;
于 2010-02-14T21:25:42.417 に答える
5

これは、警告の原因を突き止めるための優れた情報ですが、Owen が言及している警告をオフにしないことをお勧めします。これらのランタイム関数はPHP 5.4.0で削除されているため、開発者はそのような変数の使用を避ける習慣を身に付ける必要があります。

これを修正するのは、開発者側にとっては苦痛かもしれませんが、

$_SESSION["user"]
$user;

セッションの名前を

$_SESSION["sessuser"];

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

于 2012-05-18T00:01:53.920 に答える
2

.htaccess ini_set に変更を加えると、機能しません。次のようにする必要があります。

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0
于 2012-04-27T13:18:24.940 に答える
1

私の場合、php.ini が on から off に変わります

このような :

session.bug_compat_42 = off
session.bug_compat_warn = off

動かない場合はapacheを再起動

于 2015-03-13T15:47:30.003 に答える