特集PC技術

例で覚えるPHP

 

第9回 ファイル入出力

1.ファイルへの入出力

プログラム内で入力されたデータを別ファイルに書き込んで保存する、というのはよく用いられる手法です。 PHPでは、一般的なテキスト形式のファイル入出力やバイナリ形式のファイル入出力の他にも、 CSVファイルの入出力もライブラリによってサポートされています。

2.ファイルのopen/close

ファイルへの入出力をするためには、まずファイルをopenしてリソースを得る必要があります。このあたりはC言語のファイル操作と大きな違いはありません。
ファイルをopenする際には、fopen()関数を用います。 第一引数にopenするファイルパスを、第二引数にopenする際のモードを設定します。
Open時の各モードを以下に示します。

モード 説明 ファイルポインタの位置
'r' 読み込みのみでopen ファイルの先頭
'r+' 読み込み/書き出し用にopen ファイルの先頭
'w' 書き出しのみでopen
ファイルサイズを0にする
ファイルが存在しない場合、作成を試みる
ファイルの先頭
'w+' 書き出し/書き出し用にopen
ファイルサイズを0にする
ファイルが存在しない場合、作成を試みる
ファイルの先頭
'a' 書き出しのみでopen
ファイルが存在しない場合、作成を試みる
ファイルの終端
'a+' 読み込み/書き出し用にopen
ファイルが存在しない場合、作成を試みる
ファイルの終端
'x' 書き出しのみでopen
既にファイルが存在する場合、E_WARNINGレベルのエラーを出力する
ファイルが存在しない場合、作成を試みる
ファイルの先頭
'x+' 読み込み/書き出し用にopen
既にファイルが存在する場合、E_WARNINGレベルのエラーを出力する
ファイルが存在しない場合、作成を試みる
ファイルの先頭

ここでいうファイルポインタというのは、処理によってどこからファイルの操作を行うのかを示すものです。

<?php

  if(!$FP = fopen("./test.txt","w"))
    echo "error";

  else{
    fwrite($FP,"test");
    fclose($FP);
  }

?>

	

出力先のテキストファイル:
ファイルに文字列が書き込まれる

3.テキスト形式とバイナリ形式のファイル入出力

テキスト形式やバイナリ形式でファイルの入出力を行う場合は、file_get_contents()関数やfile_put_contents()関数を用いると便利です。さらに、C言語でも馴染みの深いfgets()関数やfgetc()関数も用いることができます。
file_get_contents()関数やfile_put_contents()関数では、引数のフラグの値によってテキスト形式でのファイル操作かバイナリ形式でのファイル操作かを選ぶことができます。 (PHP6以降でのみ可能)

<?php
  echo "ファイル書込<br>";

  if(file_put_contents("./test.txt","more test"))
    echo "書き込みました";
  else{
    echo "書き込みに失敗しました";
  }

  echo "<br><br>ファイル読込<br>";

  if($str=file_get_contents("./test.txt"))
    echo $str;
  else
    echo "読み込みに失敗しました";
  
?>

	

ブラウザからの実行結果:
エラーメッセージは出ていない
アクセスされたテキストファイル:
文字列が書き込まれている

4.CSV形式のファイル入出力

CSVファイルとはデータの羅列をカンマで区切ったファイルのことで、 Excelなどの表計算ソフトで扱いやすいという特徴があります。この形式のファイルへの入出力も、PHPではサポートしています。 CSVファイルの入出力を行う場合は、fgetcsv()関数や、fputcsv()関数を用います。

<?php
  if(!$FP = fopen("./test.csv","r+"))
    echo "fopen error";
  else{
    $csv=fgetcsv($FP);
    print_r(array_values($csv));

    $add_data = array("and test","or test","not test");
    if(!fputcsv($FP,$add_data))
      echo "<br>書込に失敗しました";
    else
      echo "<br>データを書込ました";

    fclose($FP);
  }
?>

	

ブラウザからの実行結果:
エラーメッセージは出ていない
アクセスされたCSVファイル:
データが書き込まれる


コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1561

pagetopこのページの先頭へ戻る