ファイル入出力

トップ > PHP入門 > ファイル入出力

目次

広告

ファイル入出力について

PHPではデータの保存にデータベースがよく利用されますが、もちろんテキストファイルにデータを書き込むことも可能です。ファイルを扱う命令はいくつも実装されているのですが、一例を紹介します。

ファイルを扱うには fopen 関数でファイルを開きます。引数に「開きたいファイル」と「モード」をそれぞれ指定します。ファイルを開くとファイルポインタと呼ばれる識別文字が返され、以降はこのファイルポインタを利用してファイルを扱います。

また、開いたファイルは fclose 関数で閉じておきます。

$fp = fopen("開きたいファイル", "モード");
fclose($fp);

ファイルを読み書きする具体的な方法は、以下で紹介します。

ファイルの読み込み

fopen 関数のモードに r を指定すると、読み込みモードでファイルを開きます。

読み込みモードでファイルを開くと、fgets 関数でファイルの内容を1行ずつ読み出すことができます。具体的には以下のようなプログラムになります。

<?php

$fp = fopen("sample.txt", "r");
while ($line = fgets($fp)) {
  echo "$line<br />";
}
fclose($fp);

?>

これを実行すると、sample.txt の内容が改行区切りですべて表示されます。sample.txt はあらかじめ作成しておき、適当な内容を記載しておきます。

$line = fgets($fp) によってファイルの内容を1行読み出すことができ、これを繰り返し条件としています。つまり、ファイルの末尾に達するまで echo で内容を表示し続けます。

ファイルへの書き込み

fopen 関数のモードに w を指定すると、書き込みモードでファイルを開きます。

書き込みモードでファイルを開くと、fwrite 関数でファイルの内容を書き換えることができます。具体的には以下のようなプログラムになります。

<?php

$fp = fopen("sample.txt", "w");
fwrite($fp, "ファイルへの書き込みサンプル");
fclose($fp);

?>

これを実行すると、sample.txt の内容が ファイルへの書き込みサンプル になります。sample.txt はあらかじめ作成しておき、書き込み権限を与えておきます。

なお、改行文字を書き込みたければ \n を書き込みます。文字の表示と同様に、\n と書いた箇所でテキストが改行されます。

ファイルへの追加書き込み

fopen 関数のモードに a を指定すると、追記モードでファイルを開きます。

追記モードでファイルを開くと、fwrite 関数でファイルの内容に追記することができます。具体的には以下のようなプログラムになります。

<?php

$fp = fopen("sample.txt", "a");
fwrite($fp, "ファイルへの追記サンプル");
fclose($fp);

?>

これを実行すると、sample.txt の内容に ファイルへの追記サンプル が追加されます。sample.txt はあらかじめ作成しておき、書き込み権限を与えておきます。

書き込みモードとは異なり、プログラムが実行されるたびにファイルの末尾に追記が行われます。

file_get_contents と file_put_contents

これまでに紹介したように、fopen 関数や fclose 関数を使用すればファイルを読み書きすることができます。ですがPHPには、より簡単にファイルの内容を扱える関数が用意されています。
少し処理の自由度は下がるものの、これらを利用すればより短いコードでファイルを扱うことができます。

file_get_contents

ファイルの内容を表示する場合、file_get_contents 関数を使用すれば以下のように書くことができます。

<?php

echo file_get_contents("sample.txt");

?>

これを実行すると、sample.txt の内容がすべて表示されます。

一度に表示するので、fopen 関数、fgets 関数、fclose 関数を使用したときのように「各行末に <br /> を付加して順に表示する」のような処理はできませんが、単純にファイルの内容を表示したい場合は、この関数が便利です。

また、以下のように書けば、直接表示せずに変数に読み込むこともできます。

<?php

$data = file_get_contents("sample.txt");

?>

file_put_contents

ファイルに書き込む場合、file_put_contents 関数を使用すれば以下のように書くことができます。

<?php

file_put_contents("sample.txt", "ファイルへの書き込みサンプル");

?>

これを実行すると、sample.txt の内容が ファイルへの書き込みサンプル になります。

ファイルの内容全体を書き換えるので、fopen 関数、fwrite 関数、fclose 関数を使用したときのように「ファイルの末尾にデータを追加する」のような処理はできませんが、単純にファイルの内容全体を書き換えたい場合は、この関数が便利です。