PHPでのファイルへの書き込み

  • PHP
  • 現在地

ファイルへの書き込み関数

ファイルに書き込みを行う関数は、file_put_contents() と fwrite() の2つがあります。

今回は、形式を伴わない書き込み用関数ということにしているので、fputcsv() は除きます。

  • file_put_contents()

    関数 file_put_contents() は、指定したファイルに文字列を書き込みます。(存在しない場合は作成します。)

    書き込む文字列として一次元配列を指定すると、配列内の文字列をすべて書き込みます。

    • file_put_contents(
      • ファイルのパス, 書き込む文字列, フラグ
    • );

    フラグの部分における値は、以下の三つがあります。

    フラグ説明
    FILE_USE_INCLUDE_PATHファイルを探す際に include_path で設定したディレクトリも含めます。
    FILE_APPENDデータを上書きでなく、追記します。
    LOCK_EXファイルに対して排他ロックします。(他からの読み書きを、書き込みの間待機させる。)

    複数のフラグを指定する場合は、OR演算子(|)で連結します。

  • fwrite()

    関数 fwrite() は、ファイルポインタの位置に従って文字列の書き込みを行います。

    上書きや追記の指定は、fopen() で指定したモードに影響されます。

    • fwrite(
      • ファイルポインタ元, 書き込む文字列, 長さ
    • );

    長さは、書き込む文字列から何バイト分まで書き込むかという長さで、省略するとすべて書き込まれます。

    fwrite() 自体はファイルを開きませんので、あらかじめファイルポインタ元となるファイルを fopen() で開き、変数に格納しておく必要があるので、以下のような形式で書き込みを行います。

    • <?php
      • $handle = fopen('sample.txt','w');
      • fwrite($handle,'書き込む文字');
      • fclose($handle);
    • ?>

    なお、file_put_contents() のフラグにより利用できる排他的ロックの機能は、fopen() でファイルを開いた後に、関数 flock() を利用することで同様の事が可能です。(ただし Ver 5.3.2 以上では、ロック後の開放も行わなければならないようです。)

    外部サイト : PHP: flock - Manual

後書き

file_put_contents() や fopen() は、指定したパスにファイルが存在しない場合、ファイルを作成します。(touch() も同様。)

ただ、ディレクトリも存在しない場合は、警告を返してファイルを作成もしません。

存在しないディレクトリに存在しないファイルを作成するために書き込む場合は、まずディレクトリのチェックを行い、無い場合はディレクトリを作成し、ファイルに書き込むという処理が必要になるようです。

スポンサードリンク

inserted by FC2 system