Home > PHP

ファイルに書き出す

 ファイルに書き出す操作は以下のようになります。シェルのような'>'とか'>>'なんで書き出しができないので何だか慣れませんが、phpではファイルを開くときにモードを指定してファイル操作を行います。phpは各コマンドがきちんとした意味のある文字になっていることが多いです。逆にいうと歴史的にCとかPerlなどはある種の記号がそのコマンドになっていたります。一長一短ですが、このモードというのも結構面倒です。

モード
r 読み込みのみで開きます。ファイルポインタはファイルの先頭におきます。
r+ 読み書き可能な状態で開きます。ファイルポインタはファイルの先頭におきます。
w 書き込みのみで開きます。ファイルポインタはファイルの先頭におき、ファイルサイズをゼロにします。ファイルが存在しない場合は新規作成します。
w+ 読み書き可能な状態で開きます。ファイルポインタはファイルの先頭におき、ファイルサイズをゼロにします。ファイルが存在しない場合は新規作成します。
a 追加書き込みモードです。ファイルポインタをファイルの終端におき、ファイルが存在しない場合は新規作成します。
a+ 追加書き込み・読み取りが可能なモードです。ファイルポインタをファイルの終端におき、ファイルが存在しない場合は新規作成します。
x 書き込みのみで開きます。ファイルポインタはファイルの先頭におきます。ファイルが存在するとfopen関数は失敗し、E_WARNINGレベルのエラーを出力します。ファイルが存在しない場合は新規作成します。
x+ 読み込み・書き込みが可能なモードです。ファイルポインタはファイルの先頭におきます。ファイルが存在するとfopen関数は失敗し、E_WARNINGレベルのエラーを出力します。ファイルが存在しない場合は新規作成します。
 実際に使用するモードは比較的限られていて、単に読み込む際には"r"を、新規でファイルに書き込む(追加書き込みをしない)場合は"w"を利用します。最近はMySQLなどの大規模なデータベースもかなり軽く扱えるものがありますので、ファイル操作もちょっとマイナーになってきましたが...。

バイナリモード
(省略時)

テキストモード

出力時 : 改行文字 '\n'(0x0a) ⇒ '\r' / '\n'(0x0d / 0x0a)に変換

入力時 : '\r' / '\n'(0x0d / 0x0a) ⇒ 改行文字 '\n'(0x0a)に変換

0x1a を EOF(ファイルエンドとする)

b

バイナリモード("wb"、"rb" のように指定)

上記の変換を行わない

0x1a を EOF扱いしない

 基本的に使用しないくてもファイルの読み書きに不便はありませんがWindows OSではバイナリモードをプラスしないとちゃんと読み込まない場合があるようです。

ファイルを読み込み
$file = '../dir//file.txt';
$fp = fopen($fle, "r");
  flock($fp, LOCK_EX);
    $line = fgets($fp, 1000);//ここで読み込み
  flock($fp, LOCK_EX);
fclose($fp);

ファイルに上書きで書き込み(ファイルがない場合は新規作成)
$file = '../dir//file.txt';
$data = '書き出す文字列';
$fp = fopen($file, "w");
  flock($fp, LOCK_EX);
    fputs($fp, $data);//ここで書く
  flock($fp, LOCK_UN);   
fclose($fp);

ファイルに追加で書き込み(ファイルがない場合は新規作成)
$file = '../dir//file.txt';
$data = '書き出す文字列';
$fp = fopen($file, "a");
  flock($fp, LOCK_EX);
    fputs($fp, $data."\n");
  flock($fp, LOCK_UN);    
fclose($fp);