【PHP5】ファイル入出力
ファイル入出力
PHPでも、テキストファイル等を使ってデータを読み書きすることができます。
fopen関数
引数に「ファイル名」と「モード」を指定します。
ファイルのオープンに成功すると戻り値としてファイルポインタが返されます。
ファイルポインタを利用してファイル操作を行います。
また、オープンしたファイルは処理が終わったら fclose 関数で必ず閉じます。
$fp = fopen("ファイル名", "モード");
fclose($fp);
指定できるモードは、以下のとおりです。
モード | 説明 |
---|---|
'r’ | 読み込み専用でオープンします。 ファイルポインタをファイルの先頭に置きます。 |
'r+’ | 読み書き込み用でオープンします。 ファイルポインタをファイルの先頭に置きます。 |
'w’ | 書き込み専用でオープンします。 ファイルポインタをファイルの先頭に置きます。 また、ファイルサイズをゼロにします。 ファイルが存在しない場合には、 作成を試みます。 |
'w+’ | 読み書き込み用でオープンします。 ファイルポインタをファイルの先頭に置きます。 ファイルサイズをゼロにします。 ファイルが存在しない場合には、作成を試みます。 |
'a’ | 追加書き込み専用でオープンします。 ファイルポインタをファイルの終端に置きます。 ファイルが存在しない場合には、作成を試みます。 |
'a+’ | 読み込みと追加書き込み用でオープンします。 ファイルポインタをファイルの終端に置きます。 ファイルが存在しない場合には、作成を試みます。 |
'x’ | 書き込み専用でオープンします。 ファイルポインタをファイルの先頭に置きます。 ファイルが既に存在する場合には、オープンは失敗し、エラーを発行します。 ファイルが存在しない場合には新規作成を試みます。 ローカルファイルに対してのみ有効です。 |
'x+’ | 読み書き込み用でオープンします。 それ以外のふるまいは 'x’ と同じです。 |
'c’ | 書き込み専用でオープンします。 ファイルが存在しない場合には新規作成を試みます。 ファイルが既に存在する場合でも切り詰めたりせず、 関数のコールが失敗することもありません。 ファイルポインタをファイルの先頭に置きます。アドバイザリ・ロックを確保してからファイルを変更したい場合に便利です。 |
'c+’ | 読み書き込み用でオープンします。 それ以外のふるまいは 'c’ と同じです。 |
ファイルの読み込み
fopen 関数のモードに r を指定すると読み込みモードでファイルをオープンします。
ファイルをオープンできたら、fgets 関数でファイルの内容を読み込むことができます。
なお、fgets 関数は、ファイルの内容を1行ずつ読み込みます。
$fp = fopen("sample.txt", "r");
while ($line = fgets($fp)) {
echo "$line
";
}
fclose($fp);
fgets 関数は、ファイルポインタから読み込むデータがもうない場合は FALSE を返します。
ファイルへの書き込み
fopen 関数のモードに w を指定すると書き込みモードでファイルをオープンします。
ファイルをオープンできたら、fwrite 関数でファイルの内容を書き換えることができます。
$fp = fopen("sample.txt", "w");
fwrite($fp, "書き込みテスト");
fclose($fp);
改行文字を書き込みたい時には \n を書き込みます。
文字の表示と同様に、\n と書いた箇所でテキストが改行されます。
ファイルへの追加書き込み
fopen 関数のモードに a を指定すると追記モードでファイルをオープンします。
ファイルをオープンできたら、fwrite 関数でファイルの内容に追記することができます。
$fp = fopen("sample.txt", "a");
fwrite($fp, "追記テスト");
fclose($fp);
書き込みモードとは異なり、プログラムを実行するたびにファイルの末尾に追記されます。
簡易ファイル操作
通常は、fopen 関数と fclose 関数を使用してファイルの読み書きを行いますが、
PHP には、簡単にファイル操作ができる関数が実装されています。
file_get_contents と file_put_contents です。
file_get_contents
ファイルの内容を表示したい時には、file_get_contents 関数を使用します。
ただし、fgets 関数のように1行ずつ読み込むことはできません。
ファイルの内容を編集する必要もなくて、ただ単に表示したい場合には便利です。
file_put_contents
データをファイルに書き込みたい時には、file_put_contents 関数を使用します。
ただし、ファイルの内容全体を書き換えるので、fwrite 関数のように追加書き込みなどができません。
ファイルの内容全体を書き換えたい時には、便利です。