2009-11-26

【PHP】php.iniのregister_globals設定【サーバ移行】

ちょっと前の話になるんだけど、

もう忘れてしまいそうなのでメモっておく。



この間、研究室の業績サーバを移行する仕事をしていた。

以前より構築済みの環境は、



言語: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そのときの後輩がなんとかしてくれるさ。きっと。



0 件のコメント: