[PHP-users 6596] Re: スーパーグローバル

Sunao Kiyosue php-users@php.gr.jp
Tue, 02 Apr 2002 12:35:12 +0900


きよすえです。

"S.Okazaki" wrote:
> 
> おはようございます。岡崎です。
> 
> 昨日から青マンモスを読んで、register_globals=off
> に取り組んでおります。
> 当然今までいい加減に書いたスクリプトは全然動かなくなりました。
> 現在動くように修正中ですが、皆様はどうやって、修正したのでしょうか?
> やはり、一つ一つ検索しながらでしょうか?
> print("<a href=\"$PHP_SELF?mode=auth\">承認</a>\n");
> 等 $PHP_SELF や $REMOTE_ADDR を多用しているのですが、
> それは一括変換で,$_SERVER[PHP_SELF] 等に変換しています。
> しかし、本来であれば $HTTP_GET_VARS[name] 等としておけば、
> これらも一括変換できますが、残念ながらしていたり、
> していなかったりです(^^;
> 「いい加減に書いた報いだ」と言われればそれまでなのですが、
> 何かいい方法はないでしょうか?
> お勧めの修正法などあればご教示お願いいたします。

全然、お勧めでもないのですが、場当たりてきにファイルの先頭で、
foreach( $_POST as $key => $value){
  $$key = $value ;
}
とかで、逃げてます。。


> また、ページにアクセスした時に、セッションに
> user_sesとpass_sesが登録されていなければ、強制的に
> 承認画面($mode=print_auth)に飛ばすという部分があります。
> register_globals=On の時は
> /////////////////////////////////////////////////////////
> if($user_ses=="" || $pass_ses=="") {
>     if($mode!="print_auth" && $mode!="auth_exec") {
>         header("location: $PHP_SELF?mode=print_auth");
>     }
> }
> //////////////////////////////////////////////////////////
> で動いていました。
> しかし、register_globals=Offにして、
> //*************************************************************//
> if(isset($_SESSION[user_ses])) {                               //
>     $user_ses=$_SESSION[user_ses];                             //
> }                                                              //
> if(isset($_SESSION[pass_sess])) {                              //
>     $pass_ses=$_SESSION[pass_ses];                             //
> }                                                              //
> if($user_ses=="" || $pass_ses=="") {                           //
>     if($mode!="print_auth" && $mode!="auth_exec") {            //
>         header("location: $_SERVER[PHP_SELF]?mode=print_auth");//
>     }                                                          //
> }                                                              //
> //*************************************************************//
> 
> と、書き換えると、リダイレクトを繰り返してしまいます。
> $mode=print_auth側は、承認画面をhtmlで表示するだけで、特に
> 何もしていません。
> おそらく上の書き方がまずいのだと思いますが、煮詰まってしまいました。
> どこが悪いのかご指摘お願いいたします。

とりあえす、変数を出力して、値が入っているか確かめるのが
手っ取り早いと思います。
$mode の値はちゃんと入っているのでしょうか?

あと、環境を書いた方がいいですね。

では、
-- 
--------------------------------------------------------

Sunao Kiyosue (清末 直)
--------------------------------------------------------