ファイル

概要

PHPではファイル処理を行うこともできます。
ファイルからデータを読み出してプログラムに利用することも、
プログラム中のデータをファイルに書き出すこともできます。

操作の流れ

ファイル操作は読み込む場合も、書き込む場合も以下の流れで実行されます。
	
php_0023
php_0023

ファイルパーミッション

ファイルパーミッションとはサーバーでファイルを管理する際のアクセスに制限のことです。
基本的に、読み込み許可、書き込み許可、実行許可の3つがあります。
ファイルパーミッションの設定次第では読み書きができないので注意してください。

php_0024
php_0024

ファイルを開く

ファイルを開くには「fopen」関数を使用します。

fopen関数
関数内容 引数で指定したファイルを開きます。
オープンに成功したらファイルハンドルが返り、
失敗したらfalseが返ります。
戻り値 オープンの成否
成功はファイルハンドル、失敗はfalse
引数 説明
第1引数 ファイル名
第2引数 モード

ファイルハンドル

ファイルハンドルとはfopenで開かれたファイルと関連付けられたデータで、
ファイルの読み込み位置や、書き込み位置の情報が保存されています。
この後のファイルの読み書きやファイルを閉じる処理は
全てこのファイルハンドルを通して行います。

モード

モードはオープンしたファイルに行える処理を設定します。
処理モードは選択したモードの内容しか行うことができません。
つまり「r」を指定したら読み込みのみ、「a」「w」を指定したら
書き込みのみしか行えません。

モード内容
モード 内容
r 「r」は読み込み専用モードです。
w 「w」は書き込み専用モード。
既に存在するファイルをオープンした場合は、
上書きされるので注意してください。
a 「a」は追加書き込みモードです。
既に存在するファイルをオープンした場合は、
ファイルの末尾から書き込みが行われます。
※モードは上の内容以外にも存在します。

ファイルを閉じる

「fopen」でオープンしたファイルは「fclose」関数を使用して必ず閉じる必要があります。
閉じないままだと、再度オープンさせようとした際に開けなくなったりと
バグの原因になります。

fclose関数
関数内容 引数で指定したファイルハンドルのファイルを閉じます。
問題なく閉じれたらtrue、失敗したらfalseが返ります。
戻り値 ファイルクローズの結果
成功はtrue 失敗はfalse
引数の型 説明
第1引き数 ファイルハンドル

<?php
$fh = fopen("Test.txt", "r");

	if ($fh != false)
	{
		fclose($fh);
	}
?>

書き込み

ファイルにデータを書き込むには「fwrite」関数を使用します。

fwrite巻数
関数内容 引数で指定した文字列をファイルに書き込みます。
戻り値 書き込みの成否
成功は書き込んだバイト数
失敗はfalse
引数の型 説明
第1引数 ファイルハンドル
第2引数 書き込む文字列

<?php
	$fh = fopen("test.txt", "w");

	if ($fh != false)
	{
		fwrite($fh, "wirte test");
		
		fclose($fh);
	}

読み込み

ファイルの読み込み方法は複数あり、今回は「fread」と「fgets」関数を使用します。

fread

fread関数は指定したサイズ分だけファイルからデータを読み込みます。

fread関数
関数内容 引数で指定したサイズ分だけファイルからデータを読み込みます。
読み込みに成功したら読み込んだ文字列が返り、失敗したらfalseが返ります。
読み込んだ後はファイルハンドルの位置が読み込んだサイズ+1の位置になります。
例えば20バイトのファイルから10バイト分読み込んだ場合は
読み込み後のファイルハンドルの位置は11バイト目に設定されます。
戻り値 読み込んだ結果
成功は読み込んだ文字列
失敗はfalse
引数の型 説明
第1引数 ファイルハンドル
第2引数 読み込みサイズ
※最大8192バイトまで

<?php
	$fh = fopen("fread_test.txt", "r");

	if ($fh != false)
	{
		$read_data = fread($fh, filesize("fread_test.txt"));

		if ($read_data != false)
		{
			echo $read_data;
		}
		fclose($fh);
	}
?>

fgets

fgetsはファイルから1行分データを読み込む関数です。

fgets関数
関数内容 ファイルから1行分データを読み込みます。
データ読み込まれたら、ファイルハンドルは次の行の先頭に移動します。
例えば10行のデータがあり、fgetsを2度実行した場合、
ファイルハンドルは3行目の先頭に設定されます。
戻り値 読み込んだ結果
成功は読み込んだ文字列
失敗はfalse
引数の型 説明
第1引数 ファイルハンドル
第2引数 最大文字数
※オプションなので設定しなくてもいい

<?php
	$fh = fopen("fread_test.txt", "r");

	if ($fh != false)
	{
		while ($feof($fh) == false)
		{
			$line = fgets($fh);
			echo $line;
		}

		fclose($fh);
	}
?>

補助関数

「■読み込み」の具体例でも使っていますが、ファイル操作する際に
よく利用される関数がいくつかあるので、紹介します。

ファイルサイズ取得

ファイル操作ではファイルのサイズをもとに処理を実装することがあります。
そのような時は「filesize」関数を使用します。

filesize関数
関数内容 引数で指定したファイルのサイズを返します。
取得に失敗した場合はfalseが返ります。
戻り値 取得結果
成功はファイルサイズ
失敗はfalse
引数の型 説明
第1引き数 ファイル名

ファイル終端判定

ファイルデータを取得する場合では、ファイルの終了を判定する必要があります。
そこで「feof」関数を使用することでファイルの終端に
達したかどうかを判断できます。

feof関数
関数内容 指定されたファイルハンドルの位置が終端かどうかを判断する
ファイルの途中ならfalseを返します。
戻り値 終了判定
ファイルハンドルが終端ならtrue
ファイルの途中ならfalse
引数の型 説明
第1引き数 ファイルハンドル

ファイル(ディレクトリ)存在判定

ファイルやディレクトリが既にあるかどうかを判断したい場合は
「file_exists」関数を使用します。

file_exists関数
関数内容 指定したファイル、またはディレクトリが存在するかを判定する
存在すればtrue、存在しなければfalseを返します。
戻り値 ファイルorディレクトリの有無
有はtrueで無はfalse
引数の型 説明
第1引き数 ファイル名 or ディレクトリ名