• ベストアンサー

ブラウザからの変数変更[PHP]

こんにちは。 PHPスクリプトの配布プロジェクトを運営しております。 早速ですが、質問です。 インストールプログラムを作ろうと思い、パスワードの設定のページを作成したのですが、$_POSTを使用しデータを受信するところまではうまくできました。 しかし、そこから./config/instdata.phpの中の変数、 $adminpass = ""; に保存する方法がわかりません。 fopen()関数を使用したらできるかもしれないと思ったのですが、詳しい方法がわかりません。 どなたか、教えていただければ幸いです。 ソースは、以下になります。 [../install/index.php] <途中略(<head>など)> <form method="post" action="../install/passcheck.php"> <input type="password" style="width:350px; height:50px; display:block; font-size:35px;" name="password"> <input type="submit" value="送信" style="width:150px; height:50px; letter-spacing:30px; font-size:20px; font-weight:bold;"> </form> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [../install/passcheck.php] <?php $pass = $_POST["password"]; ?>   ・   ・   ・ <以下略> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [../config/instdata.php] <?php $adminpass = ""; // 現在は、設定していません。 <以下略> ?> passcheck.phpは、パスワードの保存用ファイルです。 ここで変数「$adminpass」にパスワードの保存をしたいと思っています。 長文失礼しました。回答をお待ちしております。

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

  • ベストアンサー
  • nicolish
  • ベストアンサー率72% (13/18)
回答No.2

$string = "<?php\n" . '$adminpass = ' . $_POST['pass'] . ";\n" . '?' . '>'; file_put_contents('./config/instdata.php', $string); プログラムの構造がおかしくなるような危険な文字列などを排除するのを忘れないようにしましょう。 というか、phpファイルを動的に生成するのは危険すぎるので、普通はファイルなりDBなりに適当に書き出して、PHPからそれを読み出すような処理をします。

ri19960913
質問者

お礼

すいません。自己解決しました。 $string = "<?php\n" . '"' . '$adminpass = ' . $_POST['pass'] . '"' . ";\n" . '?' . '>'; file_put_contents('./config/instdata.php', $string); で実験したところ、行きました。 お二方、ありがとうございました! 感謝です!

ri19960913
質問者

補足

ありがとうございます。 先ほど試したところ、正常に変更されました。 また、質問で申し訳ないのですが、 保存すると、 <?php $adminpass = 12345; ?> のようになります。 パスワードをダブルクォーテーション(")で囲みたいのですが、どのようにすればよいでしょうか? $string = "<?php\n" . '$adminpass = ' . "$_POST['pass']" . ";\n" . '?' . '>'; file_put_contents('./config/instdata.php', $string); や、 $string = "<?php\n" . '$adminpass = ' .". $_POST['pass'] .". ";\n" . '?' . '>'; file_put_contents('./config/instdata.php', $string); など、いろいろ試したのですが、いきません。 どうか、よろしくお願いします。

その他の回答 (1)

回答No.1

[../config/instdata.php] こちらのファイルを、スクリプト実行時にインクルードするなりして 簡単に使えるようにする…ということですよね? http://php.benscom.com/manual/ja/function.var-export.php 関数 var_export を使うと便利です。 この関数に配列を渡すと、 array(   :   : ) という感じの文字列で返ってくるので、それを使います。 // まず設定ファイルの中身を読み込み $conf = include('../config/instdata.php'); // 新たな設定を上書き $conf['adminpass'] = $pass; // ファイルを開く $fp = fopen('../config/instdata.php', 'w') or die('ファイルを開けません'); // 書き込む文字列 $str = '<?php return '; $str .= var_export($conf, true); $str .= '?>'; // 書き込み fwrite($fp, $str); // ファイルを閉じる fclose($fp); とっても単純につくると、上のようになります。 本来ならファイルが壊れるのを防ぐために、ファイルロックの機構を施したりします。 このようにすると、../config/instdata.php は <?php return array(   :   : ) ?> みたいな内容になります。使うのも簡単で、設定ファイルを読み込みたいページから $conf = include('../config/instdata.php'); とするだけで読み込めます。 分かりにくい説明でスミマセン;

関連するQ&A