<<前 [TOP] 次>>
PHPでファイル操作をする場合には以下のような処理となります。
書き込み・読み込み先のファイルはPHPがアクセスできるファイルパーミッションにしておくことが必要ですが、Windowsで試している場合ならデフォルトのパーミッションのままで大丈夫です。
以下はHTMLのフォームで入力されたデータを追加書き込みする例です。
以下のHTMLファイルとPHPプログラムをテキストエディタで作成して「phpsample」フォルダに保存して下さい。
【comment.html】
<form action="add-comment.php" method="post"> 一言お願いします。 <input type="text" name="comment"><br> <input type="submit"> </form>
【add-comment.php】
<p>送信されたデータをファイルへ保存する</p> <?php $comment=$_POST['comment']; $datafile="C:\Apache24\htdocs\phpsample\\comment.dat"; if (!($file = fopen($datafile, 'a'))) { print("ファイルをオープンできません。終了します。"); exit(); } fwrite($file, $comment."\n"); fclose($file); if (!($file = fopen($datafile, 'r'))) { print("ファイルをオープンできません。終了します。"); exit(); } while ($line = trim(fgets($file))) { print("${line}<br>\n"); } fclose($file); ?>
Apacheを起動し、Webブラウザで「http://localhost/phpsample/comment.html」にアクセスして実行結果を確認してください。
「C:\Apache24\htdocs\phpsample」フォルダに「comment.dat」というファイルが作成されていると思います。
「comment.dat」には、テキストフィールドに書いた文字が書かれているはずです。
「fopen」でファイルがないなどの理由でエラーが出力される場合、今回の例ではexit()関数で終了していますがエラー表示を出さずに処理を続行したければエラー制御演算子の"@"を使用して「@fopen()」としてください。
fopen()の引数は(ファイル名, モード)です。
最初のfopen()の第2引数は「'r'」なので「読み込み用として利用」することをあらわし、次のfopenは「'a'」なので「追加書き込み用として利用」することをあらわしています。
このほかには以下のようなモードがあります。
モード | 説明 |
---|---|
r+ | 読み込み・書き込み用としてオープン |
w | 書き込み用としてオープンする。ファイルが存在しないときは上書き。 ファイルが存在している場合、内容はクリアされる |
w+ | 読み込み・書き込み用としてオープンする。ファイルが存在しないときは上書き。 ファイルが存在している場合、内容はクリアされる |
a+ | 読み込み・書き込み用としてオープンする。ファイルが存在しないときは上書き。 ファイルが存在している場合、追加書き込みされる |
x | 書き込み用としてオープンする。ファイルが存在する場合はエラーを返す。 ローカルファイルに対して有効。 |
x+ | 読み込み・書き込み用としてオープンする。ファイルが存在する場合はエラーを返す。 ローカルファイルに対して有効。 |
【fwrite()関数】
バイナリモードでテキストを書き出します。
引数は(ハンドル名, 文字列)です。
さらにバイト数をあらわす引数を加えて「指定バイト数書き出す」ようにもできます。
【fgets()関数】
保存されているデータから1行テキストを取り出すためにfgets()を用います。
引数は(ハンドル名, [読み出すバイト数])です。
「読み出すバイト数」は省略可能で、デフォルトは1024バイトです。
fgets()を用いると、改行かEOF(ファイルの終わり)までを1つのデータとして読み出します。
【trim()関数】
fgets()を囲んでいるtrim()関数は、第1引数で指定された文字列の行頭や行末にある空白や改行などを削除する関数です。
デフォルトでは、「通常の空白」「\t」「\n」「\r」「\0」「\x0B」が削除されます。
引数をもう1つ与えることで、任意の文字を削除することもできます。
【fclose()関数】
ファイルを閉じます。
引数は(ハンドル名)です。
↓↓クリックして頂けると励みになります。