[PHP]下記のワーニングが出たときの対処法

Read More

こんなのがページの下の方に出てた
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


和訳
警告: Unknown(): お使いのスクリプトは、セッションのサイドエフェクトに依存している可能性があります。このサイドエフェクトはPHP 4.2.3 まで存在しています。register_globalsを有効(enabled)にしない限り、セッションエクステンションは、グローバル変数をデータのソースとして認識しません。session.bug_compat_42 または、session.bug_compat_warn をoffにすることで、この機能とこの警告メッセージをそれぞれ無効(disable)にすることができます。


対処法のうち、
register_globalsを有効にするのはregister_globals問題に引っかかるのでまず却下。


となると、
session.bug_compat_42、またはsession.bug_compat_warnのディレクティブをoffにするしかないようだ。


とりあえずPHPマニュアルでこれらのディレクティブについて調べてみた。
session.bug_compat_42 boolean:
PHP バージョンが 4.2.3 とそれ以前には、たとえ register_globals が無効の場合でもグローバルスコープでセッション変数の初期化を許してしまうドキュメント化されていない特徴/バグがあります。 この機能を使用している場合で session.bug_compat_warn も有効にしている場合、 PHP 4.3.0 とそれ以降のバージョンでは警告が発されます。 この特徴/バグは、 このディレクティブを無効にすることで無効にすることが可能です。 

session.bug_compat_warn boolean:
PHP バージョンが 4.2.3 とそれ以前には、たとえ register_globals が無効の場合でもグローバルスコープでセッション変数の初期化を 許してしまうドキュメント化されていない特徴/バグがあります。 この機能を session.bug_compat_42 と session.bug_compat_warn を有効にして使用している場合、 PHP 4.3.0 とそれ以降のバージョンでは警告が発されます。 
http://manual.xwd.jp/ref.session.html


ふむふむ。
Ver4.2.3以前ではこういうバグがあったんだね。

んで、4.3.0以降の環境でこのバグを含むプログラムを実行すると、

『今の環境だと大丈夫だけどPHPのVerが4.2.3以前の環境だとバグになるよー。PHPのVer下げる時は気を付けてねー』

っていう警告となるわけだ。




対処法は以下の2通り。

.htaccessで対処する
php_flag session.bug_compat_42 off
## php_flag session.bug_compat_warn off



プログラム内で対処する
<?php
ini_set("session.bug_compat_42", 0);
// ini_set("session.bug_compat_warn", 0);
?>





つーかVer4.3未満とかもうないだろ。

普通に警告消してこの件は終わり。



何よりオレの環境でこのメッセージ見たことないんだよね