PHP – 雛形 – ファイル操作

ファイルの確認

file_exists~ファイルの存在確認

基本形

file_exists()は引数で指定したファイル名のファイルが存在するかどうかを確認する。(PHP-manual)

file($filename)

戻り値はファイルの存在/不存在に従ってtrue/false。

is_readable~ファイルの読み込み可能性確認

is_readable()はファイル名を指定したファイルが存在し読み込み可能かどうかを確認する。(PHP-manual)

is_readable($failename)

戻り値は指定したファイルが存在し読み込み可能な場合はtrue、それ以外の場合にfalse

ファイルのオープン/クローズ

fopen~ファイルのオープン

基本形

多くのファイル操作では、最初にファイルをオープンしてファイルポインターリソースを取得する。ファイルの書き込みや読み込みはファイルリソースを通して行う。

fopen()は第1引数にファイル名、第2引数にモードを指定する。モードは書き込み/読み込み、ファイルポインターの位置などに応じて所定の文字列で指定。(PHP-manual)

fopen($filename, $mode)

エラー処理

fopen()の戻り値はresource型だが、オープンに失敗した場合の戻り値はfalse。このため、fopen()のエラーチェックは明示的にfalseであるかどうかを比較する。

flose~ファイルのクローズ

基本形

fopen()得られたファイルポインターリソースを引数に指定してファイルを閉じる。

flose($file)

エラー処理

fclose()の戻り値はbool型で、処理の成功/失敗に応じてtrue/falseが返される。しかし、明示的にfclose()に対するエラーチェックを行うのが一般的なのか(あるいはそうすべきなのか)どうか不明。

行単位の書き込み・読み込み

fwrite~行単位の書き込み

基本形

テキストを行単位で書き込むにはfwrite()を使う。エラー処理を全て除いた基本的な流れは以下の通り。

  1. fopen(ファイル名)でファイルをオープンしてファイルハンドラーを取得
    • モードの指定は新規書き込み('w')、追加書き込み('a')など
    • PHP-manual
  2. fwrite(ファイルハンドラー, 行データ)で行データを順次書き込み
    • 改行文字\nは付けられないので、必要に応じて追加書き込み
    • PHP-manual
  3. flcose(ファイルハンドラー)でファイルをクローズ

上の例では\nを付加しており、出力ファイルの内容は以下のようになる。

エラー処理

fwrite()の戻り値はint型で書き込んだバイト数を返すが、書き込みに失敗した場合の戻り値はfalse。このため、fwrite()のエラーチェックは明示的にfalseであるかどうかを比較する。

fgets~行単位の読み込み

基本形

fgets()\nで区切られた行単位でデータを読み込む。エラー処理を除いた基本的な流れは以下の通り。

  1. fopen(ファイル名)でファイルをオープンしてファイルハンドラーを取得
    • モードの指定は読込('r')など
    • PHP-manual
  2. fgets(ファイルハンドラー)で行データを順次読み込み
    • 通常while文でファイルの最後に行きつくまで順次読み込む
    • PHP-manual
  3. flcose(ファイルハンドラー)でファイルをクローズ

このコードでは、最低限ファイルが存在して読み込み可能なことをis_readble()でチェックしている。

また行データを読み込んだ後、ブラウザーで改行させるため<br>を付加している。その表示結果は以下の通り。

読み込み終了処理

fgets()の戻り値はstring型で読み込んだテキストを返すが、読み込むデータがない場合はfalse。このため、fgets()はのエラーチェックは明示的にfalseであるかどうかを比較する。

一括書き込み・読み込み

file_put_contents

基本形

file_put_contents()は、ファイル名を直接指定してデータを一括して書き込む。(PHP-manual)

この例では配列を直接渡して全要素を書き出しているが、要素間に改行文字は挿入されず、連続して書き込まれる。

要素ごとに行を区切る場合には、foreachで要素を取り出して改行文字\nを付加して書き込む。ただしこのときは前のデータを上書きしないようにFILE_APPENDフラグを立てる必要があるが、そうすると既にファイルが存在している際に追加書き込みになってしまう。

ファイルが存在しない(あるいは空のファイルが存在する)場合のファイルの内容は以下のようになる。

エラー処理

file_put_contents()の戻り値はint型で書き込んだバイト数を返すが、書き込みに失敗した場合の戻り値はfalse。このため、file_put_contents()のエラーチェックは明示的にfalseであるかどうかを比較する。

file_get_contents

基本形

file_get_contents()はファイル名を指定してその内容を一つの変数に読み込む。(PHP-manual)

改行文字\nもそのまま読み込まれるが、ブラウザーでは反映されないため、上のコードの表示結果は以下のようになる。

一括取得されたテキストをブラウザー上で改行させたい場合には、以下のように\n<br>に置き換えるとよい。

エラー処理

file_get_contents()の戻り値はstring型で読み込んだデータを返すが、読み込みに失敗した場合の戻り値はfalse。このため、file_get_contents()のエラーチェックは明示的にfalseであるかどうかを比較する。

readfile

基本形

readfile()はファイルの内容を一括して読み込み、それを直接表示する。(PHP-manual)

改行文字はブラウザーでは反映されないため、行単位で区切られたファイルでも表示は以下のようになる。

エラー処理

readfile()の戻り値はint型で読み込んだデータのバイト数を返すが、読み込みに失敗した場合の戻り値はfalse。このため、file_get_contents()のエラーチェックは明示的にfalseであるかどうかを比較する。

CSVファイルの書き込み・読み込み

fputcsv

基本形

fputcsv()は配列データをCSVファイルとして書き込む。基本の流れはfwrite()と同じ。(PHP-mannual)

上記のコードで配列をCSVとして書き込んだファイルの内容は以下の通り。

エラー処理

fputcsv()の戻り値はint型で書き込んだ文字数を返すが、書き込みに失敗した場合の戻り値はfalse。このため、file_put_contents()のエラーチェックは明示的にfalseであるかどうかを比較する。

fgetcsv

基本形

fgetcsv()はCSVからデータを読み込む。読み込みは行ごとに行われ、1つの行(フィールドは)カンマ(あるいは指定した文字)で区切られたデータごとに分けられ、1次元の配列として返される。(PHP-manual)

上記コードの表示結果は以下の通り。

エラー処理

rgetcsv()の戻り値は読み込んだ行のデータの数値展示配列だが、無効なハンドルを受け取った場合はnull、ファイル終端に達したときやその他のエラーの場合はfalseを返す。このため、fgetcsv()のエラーチェックは明示的にfalseであるかどうかを比較する。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です