この項目は、Webクライアント(Webブラウザ等)から送信されたデータをPHPプログラムに変数として受け渡すときの展開方法を指定する。
例として http://www.example.com/example.php?a=1&b=2 というURL(このURL自体は架空のものである)にアクセスし、サーバwww.example.com上のexample.phpを呼び出すとする。このとき、example.phpの動作開始時の状態はregister_globalsの設定によって変化する。
register_globals=off の設定では、example.phpの動作が開始される段階で、PHPの配列変数 $_GET['a']と$HTTP_GET_VARS['a']が1,$_GET['b']と$HTTP_GET_VARS['b']が2という内容に初期化された状態になっている。
register_globals=on の設定では、さらにPHPの変数$aが1,$bが2に初期化された状態になっている。
PHPバージョン4.1.xまでと4.2以降ではこの設定の既定値が異なっており、4.1.xまではregister_globals=on、4.2以降ではoffである。変更された理由は4.1.xまでの設定ではセキュリティ上の問題があったため(上記の例から想像できるように、PHPスクリプトが予期していない変数初期化を、URLの書き換えによって行なわせることができる)。ところがこの変更の影響で、PHPバージョン4.1.xまでを対象に作られたプログラムが、かなり簡単なサンプルでさえもPHPバージョン4.2以降で動かないということが多発しており、いわゆる「register_globals問題」として知られている。
PHP4.2以降でも、register_globalsの設定値をPHP4.1.x以前の既定値(on)にすれば過去のプログラムは動作するが、この設定状態ではセキュリティ問題を抱え込むので、インターネット上にさらすサーバーではその手は使わない方が安全である。
fz62012-02-10
yohsui2012-01-16
b3g2011-11-28
home02011-11-12
poti02011-11-12
t-taira2011-10-30
next492011-09-11
motchang2011-09-10
ockeghem2011-08-08
m383m2011-05-10
nobyu2011-05-09
takuya_1st2011-02-02
yohtani2010-12-11
renmen2010-12-07
o0cocoron0o2010-12-06
online1062010-12-05
nao_pcap2010-10-29
ichirin25012010-10-28
invent2010-10-26
ryoppy0112010-09-25