[PHP-users 24124] Re: 可変変数について

Ikuo Nagira nagi @ ml.nagi.jp
2005年 1月 13日 (木) 15:01:06 JST


こんにちは。柳樂(なぎら)と申します。。

2005/01/13 13:41 に、Koichi Shimamura さんは書きました。

>$_POST や $_GET を展開して利用しようと次のようなスクリプトを組みました。
>
>      1 <?php
>      2     foreach ($_GET as $key => $value) {
>      3         $$key = $value;
>      4     }
>      5     echo "aaa=$aaa, key=$key, bbb=$bbb";
>      6 ?>
>
>これを次のように呼び出すと
>
>http://192.168.0.3/test.php?aaa=456&key=123&bbb=789
>
>このような結果となってしまいます。
>
>aaa=456, key=bbb, bbb=789
>  
>
それはそうです。
2度目のループに入ったときに、$keyにkeyが、$valueに123が入って、$key=123
となりますが、3回目に入ったときに、$keyには bbbがセットされてループが回
るので、結局最終結果は$key=bbbになってしまいます。
ループに使っている変数と、外部から来た変数が同じ名前のため、起る事象ですね。

register_globalがoffになった経緯には、こんなふうに外部から来た変数に容易
にスクリプトで使っている変数が書き換えられる(もしくはその逆)が行われ
て、スクリプトが作成者の意図に反した動きをするとセキュリティ的にまずいか
らと思います。(特にGETの場合は、URLさえ書き換えれば簡単に変数をでっち上
げることができることになりますから)

島村さんが書かれたスクリプトと同じ動作をする関数
import_request_variables が存在しますので、マニュアルをご参照ください。
http://www.php.net/manual/ja/function.import-request-variables.php



PHP-users メーリングリストの案内