PHP ファイルオープン/読み取り/閉じ

このセクションでは、サーバー上でファイルを開き、読み取り、閉じる方法について説明します。

PHP オープンファイル - fopen()

ファイルを開くより良い方法は fopen() 関数です。この関数は readfile() 関数よりも多くのオプションを提供します。

このコースでは、テキストファイル「webdictionary.txt」を使用します:

AJAX = アシンクリーノンジャバスクリプトとXML
CSS = カスケーディングスタイルシート
HTML = ハイパーテキストマークアップ言語
PHP = PHP ヒパテクストプレプロセッサ
SQL = 架構化クエリ言語
SVG = スケーラブルベクターグラフィックス
XML = EXtensible Markup Language

fopen()の最初の引数には開かれるファイルの名前が含まれ、第二の引数はファイルを開くモードを定義します。fopen()関数が指定されたファイルを開けなかった場合、以下の例ではメッセージが生成されます:

<?php
$myfile = fopen("webdictionary.txt", "r") or die("ファイルを開けられません!");
echo fread($myfile, filesize("webdictionary.txt"));
fclose($myfile);
?>

実行例

ヒント:次にfread()およびfclose()関数について学びます。

ファイルは以下のいずれかのモードで開かれます:

モード 説明
r ファイルを読み取りモードで開きます。ファイルポインタはファイルの先頭から始まります。
w ファイルを書き込みモードで開きます。ファイルの内容は削除され、または存在しない場合に新しいファイルが作成されます。ファイルポインタはファイルの先頭から始まります。
a ファイルを書き込みモードで開きます。ファイルの既存データは保持されます。ファイルポインタはファイルの最後から始まります。ファイルが存在しない場合、新しいファイルを作成します。
x 新しいファイルを書き込みモードで作成します。ファイルが既にある場合、FALSEとエラーが返されます。
r+ ファイルを読み書きモードで開きます。ファイルポインタはファイルの先頭から始まります。
w+ ファイルを読み書きモードで開きます。ファイルの内容は削除され、または存在しない場合に新しいファイルが作成されます。ファイルポインタはファイルの先頭から始まります。
a+ ファイルを読み書きモードで開きます。ファイルに既存のデータは保持されます。ファイルポインタはファイルの最後から始まります。ファイルが存在しない場合、新しいファイルを作成します。
x+ 新しいファイルを読み書きモードで作成します。ファイルが既にある場合、FALSEとエラーが返されます。

PHPでのファイル読み取り - fread()

fread()関数は開いたファイルを読み取ります。

fread()の最初の引数には読み取るべきファイルの名前が含まれ、第二の引数は読み取る最大のバイト数を定義します。

以下のPHPコードは「webdictionary.txt」ファイルを最後まで読み取ります:

fread($myfile, filesize("webdictionary.txt"));

PHPでのファイル閉じる - fclose()

fclose()関数は開いたファイルを閉じるために使用されます。

注記:ファイルを使用した後はすべてを閉じるのは良いプログラミングの習慣です。あなたはファイルを開くことを望まないサーバー資源を占有したくありません。

fclose()は閉じるべきファイルの名前(またはファイル名を保持する変数)が必要です:

<?php
$myfile = fopen("webdictionary.txt", "r");
// 実行されるべきコード...
fclose($myfile);
?>

PHPで一行のファイルを読み取る - fgets()

fgets()関数はファイルから一行を読み取るために使用されます。

以下は「webdictionary.txt」ファイルの先頭行の出力です:

<?php
$myfile = fopen("webdictionary.txt", "r") or die("ファイルを開けられません!");
echo fgets($myfile);
fclose($myfile);
?>

実行例

注記:fgets() 関数が呼び出された後、ファイルポインタは次の行に移動します。

PHP ファイルの終端をチェック - feof()

feof() 関数は、"end-of-file" (EOF) に到達したかどうかをチェックします。

feof() は、未知の長さのデータを巡回するのに非常に役立ちます。

以下は、"webdictionary.txt" ファイルを行を一つずつ読み込む例です。ファイルの終端まで読み込みます:

<?php
$myfile = fopen("webdictionary.txt", "r") or die("ファイルを開けられません!");
// ファイルの終端まで行を一つずつ出力する
while(!feof($myfile)) {
  echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>

実行例

PHP 単一の文字を読み取る - fgetc()

fgetc() 関数は、ファイルから単一の文字を読み取るために使用されます。

以下は、"webdictionary.txt" ファイルを単一の文字で読み込む例です。ファイルの終端まで読み込みます:

<?php
$myfile = fopen("webdictionary.txt", "r") or die("ファイルを開けられません!");
// ファイルの終端まで単一の文字を出力する
while(!feof($myfile)) {
  echo fgetc($myfile);
}
fclose($myfile);
?>

実行例

注記:fgetc() 関数が呼び出された後、ファイルポインタは次の文字に移動します。

PHP Filesystem リファレンスマニュアル

完全な PHP ファイルシステムリファレンスマニュアルが必要な場合は、CodeW3C.com が提供する PHP Filesystem リファレンスマニュアル