PHPのregister_globalsについて

このQ&Aのポイント
  • xamppのPHP5.6.3でregister_globalsを有効にする方法を教えてください。
  • 参考にしている書籍の環境がPHP4.3.11でregister_globalsを有効にしているため、同様の環境を再現したいです。
  • .htaccessでregister_globalsを有効にする方法を試しましたが、エラーが発生してしまいます。別の方法で動作確認する方法があれば教えてください。
回答を見る
  • ベストアンサー

phpのregister_globalsについて

xamppのPHP5.6.3で、register_globalsを有効にする方法がありましたらご教授ください。 なぜ、有効にする必要があるかと言いますと 参考にしている書籍(少々古いのですが)の環境はPHP4.3.11で、register_globalsを有効にしたサンプルがあるためです。 下記のような有効/無効にした例があります。 現在の私の環境では、2は表示されますが1はエラーとなります。 <? // login.php ?> <html> <body> 1:<?= $login ?><br> 2:<?= $_GET['login'] ?><br> <form action="login.php" method="get"> <input type"hidden" name="login" value="ログインします"> <input type="submit"> </form> </body> </html> 色々と調べてはみたのですが・・・ htdocs内に.htaccessで php_flag register_globals on にする方法を試してみましが、1はエラーで表示されます。 やり方が悪いのか、根本的に別の問題かわからず困っております。 xamppの古いバージョンを入れ直さずに動作確認できる方法がありましたら、よろしくご教授のほど、お願いします。

noname#207627
noname#207627
  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

質問者様のPHP5.6.3ではregister_globalsをONにすること自体できなくなっています。 動作確認したいとなると、PHP5.3以下がインストールされるxamppを利用する必要があるかと思いますが、他の回答者様もご指摘している通り、 register_globalsをONにするのはセキュリティ的に大変好ましくありません。 http://php.net/manual/ja/security.globals.php 可能であれば参考の書籍を新しいものにしていただくのがよいかと・・・

noname#207627
質問者

お礼

端的なご指摘ありがとうございます。 質問内容のとおり動作確認したければ、PHP5.3以下をインストール・・・ と言うことですね。 参考書籍のご指摘もそのとおりです。確かに少々古い書籍です。 書籍中にもregister_globals問題も書かれております。

その他の回答 (2)

  • lewlondon
  • ベストアンサー率44% (24/54)
回答No.2

危ないので使わないようにしてください。 register_globals = On の場合、環境変数や GET、POST などの PHP の外部からくる値は全て $変数名 という書式で使用することが出来ます。 では、同じ変数名が存在した場合はどうなるのでしょう。これは、variables_order によって優先順位が決まります。初期値は、"EGPCS"(Environment, GET, POST, Cookie、Server の頭文字)で、左から順番に変数に展開されます。よって GET と POST に同じ名前の変数があった場合には POST の値で上書きされることになります。

noname#207627
質問者

お礼

詳しい情報ありがとうございました。 色々と調べているとregister_globals = On の恐怖・・・ などなどlewlondonさんのご指摘同様の記事を拝見しました。 参考にさせていただきます。

  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.1

register_globalsが使えたのは 5.3 までで 5.4 で完全に廃止になりました。 セキュリティー上よくないのでregister_globalsを使わないようにしましょう。

noname#207627
質問者

お礼

ご指摘の通りです。 ありがとうございます。

関連するQ&A

  • PHP初心者です。何処がエラーなのかさっぱり解りません。

    超初心者です。 PHPの勉強を始めたばかりで、いきなりつまずいています。 下記の表示になりエラーになっているのですが、何処がエラーなのか意味が解りません。 Parse error: syntax error, unexpected $end in C:\xampp\htdocs\phplesson\03\login.php on line 31 どなたか教えてください。 よろしくお願いします。 ----------------- <?php session_start(); $error_message = ""; //ログインボタンが押されたかを判定 if (isset($_POST["login"])) { if ($_POST["member_name"] == "php" && $_POST["password"] == "password") { //ログインが成功した証拠をセッションに保持 $_SESSION["login_name"] = $_POST["member_name"]; //管理者専用画面へWebブラウザをリダイレクトさせる $login_url = "http://{$_SERVER["HTTP_HOST"]}/phplesson/03/anq_result.php"; header("Location: {$login_url}"); exit; } $error_message ="メンバー名かパスワードを間違えています。"; } ?> <html> <body> <?php if ($error_message) { print '<font color="red">' .$error_message. '</font>'; } ?> <form action="/phplesson/03/login.php" method="post"> メンバー名:<input type="text" name="member_name" value="" /><br /> パスワード:<input type="password" name="password" value="" /><br /> <input type="submit" name="login" value="ログイン" /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • register_globalや$$という変数について・・・

    PHPの勉強を始めて2週間足らずの初学者です。 質問させていただきます。 環境はwindowsXP+xampp+PHP5.2です。 現在、やや古めのPHP書籍のサンプルを試しています。 register_globals=Onの状態では、問題なく動作しました。 しかし、Offにすると反応しない部分があります。 test.phpにてsupport.phpをincludeしているのですが、 以下の箇所をそれぞれregister_globals=Off用に書き換える知恵が ありません。ほんの一部のみの抜粋にて恐縮ですがご査収願います。 ---「test.phpの一部」----------------------------------------- echo '<INPUT TYPE="radio" NAME="',$name,'"VALUE="',$kaitoubango,'">',"$val\n<br />";} ---「support.phpの一部」-------------------------------------- $kaitoubango++; $name = $kaitoubango; $val = $$name; -------------------------------------------------------------- 繰り返しになりますが、register_globals=Onの状態では、問題なく動作しましたが、Offでこの状態でフォームアクションしても$val = $$name;に値がありません。 「support.php」の$$nameを$_POST['name']に変更すれば、可能かと思いましたが、ダメでした。 なお、部分的な質問になりますが、 (1)「test.php」のNAME="',$name,'"VALUE="',$kaitoubango,'"ですが、 何故、NAME="$name" VALUE="$kaitoubango"でないのでしょうか? 「',」は何を意味しているのでしょうか? (2)「support.php」の$$nameという変数ですが、$が2つ連続した変数は今のところ、初めて見ました。これはどういう意味なのでしょうか? お詳しい方がおられましたら、何卒アドバイスのを頂戴できればと思います。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • register_globalsについて

    こんにちわ。お世話になってます。 register_globalsについての質問なのですが、現在、PHP3で書かれたソースをPHP4のregister_globalsを使ったものに書き換えています。 そこで、ファイルのアップロードに関するところで、 <FORM ENCTYPE="multipart/form-data" ACTION="ext_kakunin.php3" METHOD="POST"> <TABLE border="0" cellspacing="0" cellpadding="0"> <TR> <TD>CSV</TD> <TD ALIGN=center width=20>:</TD> <TD><INPUT TYPE=FILE SIZE=50 NAME="csv"></TD> </TR> <TR> <TD>&nbsp;</TD><TD>&nbsp;</TD> <TD><FONT size=3color=#FFFFCB>c:\_sa\re\re.csv</FONT></TD> </TR> </form>

    • ベストアンサー
    • PHP
  • 入力項目を渡したい

    すみません、質問をさせて下さい。 ------------------------------------ [main.php] <html><body> <input type="text" name="moji"><BR> <a href="next.php">次へ</a> </body></html> ------------------------------------ [next.php] <html><body> 入力項目:<?=$moji?><BR> </body></html> ------------------------------------ main.phpで入力した文字列を "リンク"でnext.phpへ渡したいのですが、 どのようにすればいいのでしょうか? ※<FORM>のACTION以外でかつJavaScriptは使用しない ちなみにphp.iniの register_globals = On にしています。 すみませんが、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPをはじめて1日目なので・・・

    参考書を見ながらPHPの勉強を始めていますが、本のサンプルと全く同様にコーディングしているはずなのに、良い結果が得られずバグとなります。 formとpostを使って内容を渡すという項目なのですが。 form.htmlの内容。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form method="post" action="form1.php"> 好きな食べ物は?<input type="text" name="food1"><br> 好きな飲み物は?<input type="text" name="food2"> <input type="submit" value="送信"> </form> </body> </html> form1.phpの内容 <?php header('Content-type: text/html; charset=UTF-8'); ?> <html> <body> <?php $f1 = $_POST['food1']; $f2 = $_POST['food2']; $f1 = htmlentities( $f1, ENT_QUOTES, 'UTF-8' ); $f2 = htmlentities( $f2, ENT_QUOTES, 'UTF-8' ); echo 'あなたは「', $f1, "」が好きなんですね。<br>\n"; echo '「', $f2, "」も好きなんですね。<br>\n"; ?> </body> </html> おそらくちょっとしたことが原因でエラーが出ているのだと思いますが、まだ始めて1日目なので、どこがいけないのかさっぱりわかりません。 一体どこがおかしいのか、教えていただけますか?

    • ベストアンサー
    • PHP
  • <?php if( $mode=='input')

    いつもお世話になりありがとうございます。 標記の件。 6行目がエラーになります。 エラーメッセージは Parse error: Unclosed '{' on line 64 in C:\xampp\htdocs\form.html on line 85 です。 <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <h1>ブログフォーム</h1> <form action="/blog_create.php/" method=_POST>  ペンネーム<br> <input type="text" name="name"><br>   ブログタイトル<br>   <input type="text" name="title"><br>    カテゴリー<br> <input type="text" name="category"><br> ブログ本文<br> <textarea name="content" id="content" cols="50" rows="80"></textarea><br> <input type="submit" value="送信"> </form> <p><a href="/">戻る</a></p> </body> どう直せばいいでしょうか? 度々申し訳ございません。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 変数が表示されない。

    HTMLフォームからgetで、phpに変数を渡し、それを表示させるだけなのですが、なぜか変数部分だけが表示できません。どなたかご教授お願いいたします。 XAMPP2.5.8をXP上で使用しています。 <送信側HTMLフォーム> <html> <body> <form action=/cgi-bin/sample.php method="get"> 今は西暦<input type=text name=yyyy>年 <input type=submit value="送信"> </form> </body> </html> <受信側PHPファイル> <?php print "今年は西暦" . $_GET['yyyy'] . "年\n"; ?> $_GET[$yyyy]な風にもしてみましたがダメでした。 php.iniのregister_globalはonにし、$_GET[]を利用しない方法で print "今年は西暦" . $yyyy . "年\n"; と試してみても結果は同じでした。 あまりに基本的なこと過ぎて恥ずかしい話ですが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 現在PHPの勉強をしています。初心者のためご教授いただければと思います

    現在PHPの勉強をしています。初心者のためご教授いただければと思います。 メールフォームを作成しており、エラーチェックで困っています。 簡単に流れを説明しますとフォーム画面で入力をしてもらったら確認画面へと移行します。 ここでエラーがあった場合、confirm.phpにてエラーチェックをし、form.phpに戻り、エラーがなければ確認画面にて入力した、項目が表示されるようにしたいと思っています。 ソースは下記のとおりになります。 form.php ---------------------- */ <html> <body> <form action="confirm.php" method="post"> 名前:<input type="text" name="name" value="" /<?php echo $errmsg['name'] ;?><br> 内容:<textarea name="comment" rows="5" cols="40"></textarea><?php echo $errmsg['comment'] ;?><br> <input type="hidden" name="contact" value="form" /> <input type="submit" name="submit" value="確認" /> </form> </body> </html> confirm.php ---------------------- */ <?php $name = $_POST['name']; $comment = $_POST['comment']; if(isset ($_POST['contact'])) { $errmsg = array(); if(empty($name)){ $errmsg['name'] = '未入力'; } if(empty($comment)){ $errmsg['comment'] = '未入力'; } if (count($errmsg) != 0) { header("Location: index.php"); exit; } } ?> <html> <body> 名前:<?php echo $name; ?><br /> 内容:<?php echo $comment; ?><br /> </body> </html> としております。 if (count($errmsg) != 0) { header("Location: form.php"); exit; 上記のようにするとエラーチェックの表示がされません。 require(form.php);にするとform.phpが表示されるのですがURLを見るとconfirm.phpの状態になっております。 header("Location: form.php");を使用してのエラーチェックをしたいのですが、どのように記述したらよろしいのでしょうか? 上記の内容でどなたかご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPについて教えてください

    以下のコードでthanks.phpにemailとgoikenが表示されません なぜでしょうか? おそらくthanks.phpが間違えてると思いますが見直してもわかりません index.html <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <form method="POST" action="check.php"> ニックネームを入力してください<br> <input name="nickname" type="text" style="width:100px"><br> メールアドレスを入力してください<br> <input name="email" type="text" style="width:200px"><br> ご意見を一言でお聞かせください<br> <input name="goiken" type="text" style="width:300px"><br> <input type="submit" value="送信"> </form> </body> </html> check.php <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php $nickname=$_POST['nickname']; $email=$_POST['email']; $goiken=$_POST['goiken']; if ($nickname==''){ print'ニックネームが入力されていません<br>'; } else { print'ようこそ'; print $nickname; print' 様'; print'<br>'; } if ($email==''){ print'メールアドレスが入力されていません<br>'; } else { print'メールアドレス:'; print $email; print'<br>'; } if ($goiken==''){ print'ご意見が入力されていません<br>'; } else { print'ご意見『'; print $goiken; print'』<br>'; } if($nickname=='' || $email='' || $goiken=''){ print'<form>'; print'<input type="button" onclick="history.back()" value="戻る">'; print'</form>'; } else { print'<form method="post" action="thanks.php">'; print'<input name="nickname" type="hidden" value="'.$nickname.'">'; print'<input name="email" type="hidden" value="'.$email.'">'; print'<input name="goiken" type="hidden" value="'.$goiken.'">'; print'<input type="button" onclick="history.back()" value="戻る">'; print'<input type="submit" value="OK">'; print'</form>'; } ?> </body> </html> thanks.php <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php $nickname=$_POST['nickname']; $email=$_POST['email']; $goiken=$_POST['goiken']; print $nickname; print'様<br>'; print'ご意見ありがとうございました<br>'; print'頂いたご意見『'; print $goiken; print '』<br>'; print $email; print'宛にメールを送信しました'; ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPについて

    PHPについて。 現在このような形でパスワードを作っております <html> <head> <title>form</title> </head> <body> パスワードを入力してください。 <form name="form" action="./sample04.php" method="POST"> <input name="pass" type="text"> <input type="submit" value="ログイン"> </form> </body> </html> ↑HTMLの文面↑ <?php // パスワードを設定する。 $pass = 1234; // form.htmlからのパスワードを受け取る $form_pass = $_REQUEST["pass"]; ?> <html> <head> <title></title> </head> <body> <?php // form.htmlからの値が$form_passと等しいか評価する if($form_pass == $pass){ echo "ログイン成功<br>", "<a href=\"./top.html\">進む</a>"; }else{ echo "ログイン失敗<br>", "<a href=\"./index.html\">戻る</a>";} ?> </body> </html> 質問はパスワードを複数作りたいのですが・・・ どうすればいいですか?PHPにはあまり詳しくないので・・・

    • 締切済み
    • PHP

専門家に質問してみよう