2

私はしばらく PHP5.3.8 を使用していますが、新しいエラーが発生しました。

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

ここに解決策があります。データのソースとしてグローバル変数を使用した PHP セッションの副作用の警告

しかし、なぜこれが起こっているのか、私はまだ理解していません。私の知る限り、$foo$_SESSION['foo']?の間にあいまいさはないはずです。

人々がこのエラーをスローすると言ういくつかのスクリプトをオンラインでテストしようとしましたが、私のシステムでは警告をスローしません。この警告が表示されているスクリプトは非常に複雑で、いくつかに分解していますエラーを再現するための行は問題があることが証明されています。

ただし、1 行に絞り込みました。

$bonus = isset($_GET['bonus']) ? $_GET['bonus'] : '';

$_SESSION['bonus']は前のページでに設定さnullれており、register_globals は PHP4.2 の何かからオフになっているため、$_GET スコープにすることはできません。

これで最初のポイントに戻ります。$bonusと の間で突然問題が発生するのはなぜ$_SESSION['bonus']ですか? 別のサイト (同じボックス) でこの正確なスクリプトを使用していて、エラーが発生しないため、突然言います。

PHPがセッション変数などをどのように処理するか、および2つの変数間に問題がある理由をより詳細に説明している場所を教えてください。

ありがとう。

アップデート

ここを見て; PHP ランタイム構成では、次のことが言及されています。

[PHP には...] グローバル スコープでセッション変数を初期化できる、文書化されていない機能/バグがあります...

それ以外に言うことはあまりないのではないかと思います。$_SESSION['foo']PHP が/$fooに問題を抱えているのは奇妙に思え$_SESSION['foo'] != $fooます ...

4

1 に答える 1

1

オフに設定session.bug_compat_42してみてください。警告の対象となる機能がオフになります。参照http://php.net/manual/en/session.configuration.php

于 2013-05-03T10:48:18.453 に答える