ファイルを開き、ファイルに書き込む - PHP

PHPでファイルを開きファイルの内容をテキストボックスに表示します。また「書き込み」ボタンを押すことでファイルに書き込みます。

コード例

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
  </head>
  <body>
    <form method="post" action="">
      <?php
      $file = 'data.txt';

      if ($_POST['button_save']) {
        //POSTされたときは書き込み処理をする
        $fp = @fopen($file, 'w');
        if ($fp == false) {
          print "このファイルには書き込みできません。<br>\n";
        } else {
          $contents = htmlspecialchars($_POST['textBox_contents']);
          fwrite($fp, $contents);
          fclose($fp);
          print "書き込み完了しました。<br>\n";
        }
      }

      $text = file_get_contents($file);
      $text = htmlspecialchars($text);
      ?>
      <textarea name="textBox_contents" cols="80" rows="10"><?php echo($text); ?></textarea>
      <br/>
      <input type="submit" name="button_save" value="保存">
    </form>
  </body>
</html>

解説

書き込みファイル名を変数に代入します。
  $file = 'data.txt';

ポストされてページが読み込まれた場合はifブロック内を実行します。
  if ($_POST['button_save']) {

fopen()関数を呼び出してファイルを開きます。第二引数に'w'を指定して書き込みモードでファイルを開きます。
  $fp = @fopen($file, 'w');

fopen()関数はファイルオープンに失敗するとfalseを返します。fopen()関数の戻り値がfalseであった場合はファイルに書き込みができない旨のメッセージを表示します。
  if ($fp == false) {
   print "このファイルには書き込みできません。<br>\n";
  } else {

ファイルがオープンできた場合は、POSTで送信されたテキストボックスの内容を読み出し、htmlspecialchars()関数を用いて特殊文字を HTML エンティティに変換します('<'→'&lt;','>'→'&gt;'など)
  $contents = htmlspecialchars($_POST['textBox_contents']);

wfrite()関数を呼び出し、変換した文字列をファイルに書き込みます。第一引数にはファイルポインタ(fopen()関数の戻り値)を第二引数には書き込むデータを与えます。
  fwrite($fp, $contents);

書き込み後ファイルをクローズします。
  fclose($fp);

最後に書き込みができた旨のメッセージを表示します。
  print "書き込み完了しました。<br>\n";

ポストでページが表示されなかった場合(通常のアクセスの場合)はファイルを開き内容を読み出し、テキストエリアに内容を表示します。
  $text = file_get_contents($file);
  $text = htmlspecialchars($text); 
  ...
  <textarea name="textBox_contents" cols="80" rows="10"><?php echo($text); ?></textarea>

実行結果

実行直後


保存ボタン押下後

参考(画面表示後に書き込み処理をするコード例)

コード例

下記のコードでも動作しますが、書き込み処理が画面表示後になるため、書き込ボタンを押して画面が表示された際に、書き込み前のテキストの内容がテキストエリアに表示されます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
  </head>
  <body>
    <form method="post" action="">
      <?php
      $file = 'data.txt';
      $text = file_get_contents($file);
      $text = htmlspecialchars($text);
      ?>
      <textarea name="textBox_contents" cols="80" rows="10"><?php echo($text); ?></textarea>
      <br/>
      <input type="submit" name="button_save" value="保存">
    </form>

    <?php
    if ($_POST['button_save']) {
      //POSTされたときは書き込み処理をする
      $fp = @fopen($file, 'w');
      if ($fp == false) {
        print "このファイルには書き込みできません。<br>\n";
      } else {
        $contents = htmlspecialchars($_POST['textBox_contents']);
        fwrite($fp, $contents);
        fclose($fp);
        print "書き込み完了しました。<br>\n";
      }
    }
    ?>
  </body>
</html>

著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-06
作成日: 2011-02-02
iPentec all rights reserverd.