PHP ファイルのオープン / 読み込み / クローズ
1. PHP fopen() - ファイルをオープンする
fopen() 関数は、ファイルまたは URL を開くために使用されます。
この関数の第1引数にはオープンする ファイル名(Name) を、第2引数にはどの モード(Mode) でファイルを開くかを指定します。
以下の表は、指定可能な主要なモードをまとめたものです。
| モード | 説明 |
|---|---|
| r | 読み取り専用(Read only)。ファイルポインタはファイルの先頭から始まります。 |
| r+ | 読み書き用(Read/Write)。ファイルポインタはファイルの先頭から始まります。既存のデータは保持されます。 |
| w | 書き込み専用(Write only)。ファイルの内容を消去(上書き)します。ファイルが存在しない場合は新規作成します。ファイルポインタはファイルの先頭から始まります。 |
| w+ | 読み書き用(Read/Write)。ファイルの内容を消去します。ファイルが存在しない場合は新規作成します。ファイルポインタはファイルの先頭から始まります。 |
| a | 追記(Append / 書き込み専用)。既存のデータは保持され、ファイルポインタはファイルの末尾から始まります。ファイルが存在しない場合は新規作成します。 |
| a+ | 追記(Append / 読み書き用)。既存のデータは保持され、ファイルポインタはファイルの末尾から始まります。ファイルが存在しない場合は新規作成します。 |
| x | 書き込み専用。ファイルを新規作成します。既にファイルが存在する場合は FALSE を返し、エラーを発生させます。 |
| x+ | 読み書き用。ファイルを新規作成します。既にファイルが存在する場合は FALSE を返し、エラーを発生させます。 |
本レッスンの各例では、以下の内容が記述された "webdictionary.txt" というテキストファイルを使用します。
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language以下の例は、"webdictionary.txt" を読み取り専用モードでオープンします。もし fopen() がファイルを開けなかった場合には、エラーメッセージを出力して終了します。
実装例:
<?php
// ファイルをオープン、失敗した場合はメッセージを表示して終了
$myfile = fopen("webdictionary.txt", "r") or die("エラー: ファイルを開けませんでした。");
// ファイルの中身を読み込んで出力
echo fread($myfile, filesize("webdictionary.txt"));
// ファイルをクローズ
fclose($myfile);
?> ヒント:fread() および fclose() 関数の詳細については後述します。
2. PHP fread() - ファイルを読み込む
fread() 関数は、オープンされたファイルからデータを読み込みます。
第1引数には読み込み対象のファイル(またはファイルポインタを保持する変数)、第2引数には読み込む最大バイト数を指定します。
以下のコードは、"webdictionary.txt" を最後まで読み込みます。
fread($myfile, filesize("webdictionary.txt"));例えば、最初の 50 バイトだけを読み込みたい場合は以下のように記述します。
fread($myfile, 50);3. PHP fclose() - ファイルをクローズする
fclose() 関数は、オープンされているファイルをクローズ(終了)します。
ヒント: すべての処理が終わった後にファイルをクローズすることは、非常に優れたプログラミングプラクティスです。サーバー上でオープンされたままのファイルが残り、不要な リソース(Resources) を消費し続けるのを防ぐためです。
fclose() には、クローズしたいファイル名(またはファイル名を保持する変数)を指定します。
<?php
$myfile = fopen("webdictionary.txt", "r");
// 何らかの処理を実行....
fclose($myfile);
?>4. PHP fgets() - 一行ずつ読み込む
fgets() 関数は、ファイルから一行(Single Line)だけを読み込みます。
以下の例では、"webdictionary.txt" の最初の1行目を出力します。
実装例:
<?php
$myfile = fopen("webdictionary.txt", "r") or die("ファイルを開けませんでした。");
// 最初の1行を取得して出力
echo fgets($myfile);
fclose($myfile);
?> 注意:fgets() 関数を呼び出した後、ファイルポインタ(File Pointer) は自動的に次の行の先頭へ移動します。
5. PHP feof() - ファイル終端(End-Of-File)のチェック
feof() 関数は、ファイルポインタが「ファイル終端(EOF)」に達したかどうかをチェックします。
feof() は、データの長さが不明な場合にループ処理を行う際に非常に便利です。以下の例では、ファイル終端に達するまで一行ずつ読み込みを繰り返します。
実装例:
<?php
$myfile = fopen("webdictionary.txt", "r") or die("ファイルを開けませんでした。");
// ファイル終端(EOF)に達するまで1行ずつ出力
while(!feof($myfile)) {
echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>6. PHP fgetc() - 一文字ずつ読み込む
fgetc() 関数は、ファイルから一文字(Single Character)だけを読み込みます。
以下の例では、ファイル終端に達するまで一文字ずつ読み込みを行い、出力します。
実装例:
<?php
$myfile = fopen("webdictionary.txt", "r") or die("ファイルを開けませんでした。");
// ファイル終端まで1文字ずつ出力
while(!feof($myfile)) {
echo fgetc($myfile);
}
fclose($myfile);
?> 注意:fgetc() 関数を呼び出した後、ファイルポインタは次の文字の位置へ移動します。