もう忘れてしまいそうなのでメモっておく。
この間、研究室の業績サーバを移行する仕事をしていた。
以前より構築済みの環境は、
言語:php4.1.x
データベース:PostgreSQL7.1.x
まあ、単にサーバのPCさんの調子が微妙だったので、この際移行してしまおうということだった。
研究室だけでの閲覧に限られていたので、別にセキュリティを強固にするわけでもない。
新しく作った環境は、
言語:php5.2.x
データベース:PostgresSQL8.3.x
��ちょっと、細かいバージョンの数字は忘れた)
PHP4とPHP5はかなり内容に違いがあり、移行時に問題があることは知っていた。
でも、そのほとんどはクラスに関係したもだ。
すでに構築済みのphpはクラスを使っていない単純な構成だったので、移行時の障害にはならないと思っていた。
データベースは下位互換あるらしいし。
でも、実際やってみると、うまくいかなかったので、問題のあるソースをだどって行くと・・・
postしてるのに、$_POSTの記述がどこにもない
ことに気づく。
どうやら、前回のサーバでは、php.iniの設定を
register_globals = on
としていたらしい。
register_globalsがonだと、
print $_POST["hoge"];
と書くべきところを、
print $hoge;
と簡略化できる。
register_globalsは、4.1まではデフォルトでon、4.2以降はoffになっている。
つまり、今回のサーバ移行で起きた問題は、phpソースがregister_globalsをonにしていることを前提としているのに、register_globalsをoffに設定していたのが原因らしい。
問題解決。
でも、そもそも、register_globalsがデフォでoffになったのは、セキュリティ的に危険であるため。
今後、PHP6ではregister_globalsが廃止され、省略表記は不可になるらしい。
��>Register globals - GeeklogJpWiki
じゃあ、今のphpもoffで使える仕様に変更しないとまずいかもね?
また、移行の話がでたとき困るし・・・
ま、いいかwそのときの後輩がなんとかしてくれるさ。きっと。