学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース

PHPプログラミング入門その17 ファイル操作

<<前  [TOP]  次>>


PHPでファイル操作をする場合には以下のような処理となります。


  • ファイルを読み込み用(あるいは保存用)として開く − fopen()
  • 読み込み処理(保存処理)を行う − fgets()やfwrite()など
  • ファイルを閉じる − fclose()


    書き込み・読み込み先のファイルは、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()関数】
    ファイルを閉じます。
    引数は(ハンドル名)です。


    <<前  [TOP]  次>>