ファイル

■概要

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

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

●ファイルパーミッション
	ファイルパーミッションとはサーバーでファイルを管理する際のアクセスに制限のことです。
	基本的に、読み込み許可、書き込み許可、実行許可の3つがあります。

		php_0024

■ファイルを開く

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

●関数仕様
	・関数名
		fopen

	・戻り値
		ファイルハンドル

	・引数
		・第一引数
			ファイル名

		・第二引数
			処理モード

	・内容
		引数で指定したファイルを開きます。
		オープンに成功したらファイルハンドルが返り、
		失敗したらfalseが返ります。

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

●処理モード
	処理モードとはオープンしたファイルに行える処理を設定します。
	※他にも処理モードは存在します。

	・r
		「r」は読み込み専用モードです。

	・w
		「w」は書き込み専用モード。
		既に存在するファイルをオープンした場合は、上書きされるので注意してください。

	・a
		「a」は追加書き込みモードです。
		既に存在するファイルをオープンした場合は、ファイルの末尾から書き込みが行われます。

	・モードの注意点
		処理モードは選択したモードの内容しか行うことができません。
		つまり「r」を指定したら読み込みのみ、
		「a」「w」を指定したら書き込みのみしか行えません。

■ファイルを閉じる

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

●関数仕様
	・関数名
		fclose

	・戻り値
		閉じるのに成功 => true
		閉じるのに失敗 => false

	・引数
		ファイルハンドル

	・内容
		引数で指定したファイルを閉じます。
		問題なく閉じれたらtrue、失敗したらfalseが返ります。

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

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

■書き込み

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

●関数仕様
	・関数名
		fwrite

	・戻り値
		成功 => 書き込んだバイト数
		失敗 => false

	・引数
		第一引数
			ファイルハンドル

		第二引数
			書き込む文字列

	・内容
		引数で指定した文字列をファイルに書き込みます。

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

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

			fclose($fh);
		}

■読み込み

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

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

	・関数仕様
		・関数名
			fread

		・戻り値
			成功 => 読み込んだ文字列
			失敗 => false

		・引数
			第一引数
				ファイルハンドル

			第二引数
				読み込みサイズ
				※最大8192バイトまで

		・内容
			引数で指定したサイズ分だけファイルからデータを読み込みます。
			読み込みに成功したら読み込んだ文字列が返り、失敗したらfalseが返ります。
			読み込んだあとはファイルハンドルの位置情報が読み込んだサイズ + 1バイトの
			位置になります。
			例えば20バイトのファイルから10バイト分読み込んだ場合は
			読み込み後のファイルハンドルの位置は11バイト目に設定されます。

	・具体例
		<?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

		・戻り値
			成功 => 読み込んだ文字列
			失敗 => false

		・引数
			第一引数
				ファイルハンドル

			第二引数
				最大文字数
				※設定しなくてもいい

		・内容
			ファイルから1行分データを読み込みます。
			データ読み込まれたら、基本ファイルハンドルは次の行の先頭に移動します。
			例えば10行のデータがあり、fgetsを2度実行した場合、
			ファイルハンドルは3行目の先頭に設定されます。

	・具体例
		<?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が返ります。

●ファイル終端判定
	fgetsなど行単位でファイルデータを取得する場合など、終了がどこかを判定する必要があります。
	そこで「feof」を使用することでファイルの終端にたっしたかどうかを判断します。

	・関数仕様
		・関数名
			feof

		・戻り値
			終端 => true
			ファイルの途中 => false

		・引数
			ファイルハンドル

		・内容
			指定されたファイルハンドルの位置が終端ならtrue、
			ファイルの途中ならfalseを返します。

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

	・関数仕様
		・関数名
			file_exists

		・戻り値
			存在する => true
			存在しない => false

		・引数
			ファイル名 or ディレクトリ名

		・内容
			指定したファイル、またはディレクトリが存在すればtrue、
			存在しなければfalseを返します。