fpassthru()関数は、fopen()関数で開いたファイルの中身をそのまま出力する関数です。この関数で表示されたときには、fclose()関数を実行しなくても、ファイルは自動的に閉じられます。
fpassthru( filepointer );
<?php
$file = fopen( "c:¥template¥close.txt", "r" );
fpassthru( $file );
?>
close.txtは、自動的に閉じられます。
ファイルの内容を一度に全て読み込むには、file()関数、およびfile_get_contents()関数を使います。file()関数は、読み込んだファイルの各行のデータを配列に格納して返します。一方、file_get_contents()関数は、読み込んだファイルの各行のデータを文字列に格納して返します。
実際に、ローカルディスク(C:)直下のtemplateディレクトリに「test.txt」を作成し、file()関数、file_get_contents()関数を使ってファイルの内容を全て読み込んでみます。
aaaaa
bbbbb
ccccc
<?php
$filename = "c:¥template¥test.txt";
$array = file( $filename );
var_dump( $array );
?>
array(3) { [0]=> string(7) "aaaaa " [1]=> string(7) "bbbbb
" [2]=> string(5) "ccccc" }
<?php
$filename = "c:¥template¥test.txt";
$str = file_get_contents( $filename );
echo $str;
?>
aaaaa bbbbb ccccc
fread()関数は、ファイル全体ではなく、指定した文字数単位で読み込みます。
fread( filepointer, string,[ length ] );
今回は、「ファイル操作」の「ファイルを開く」で、ローカルディスク(C:)直下の「template」ディレクトリに作成した「sample.txt」を使用します。
<?php
$file = fopen( "c:¥template¥sample.txt", "r" );
$str = fread( $file, 6 );
echo "$str";
fclose( $file );
?>
sample
なお、文字はバイト単位で数えます。上記のスクリプトでは、半角英字の文字列を読み込むために、6バイトを指定しています。
fgetc()関数は、ファイルから1文字だけ読み込みます。
<?php
$file = fopen( "c:¥template¥sample.txt", "r" );
$str = fgetc( $file );
echo "$str";
fclose( $file );
?>
s
fwrite()関数を使って、ファイルへの書き込みを行います。
fwrite( filepointer, string,[ length ] );
<?php
$file = fopen( "c:¥template¥sample.txt", "a" );
fwrite( $file, "書き込めましたか?" );
?>
sample.txtを表示します。書き込めましたか?
上記のスクリプトの「$file = fopen( "c:¥template¥sample.txt", "a" );」の「a」は追記書き込みを意味しています。すでに書き込まれている「sample.txtを表示します。」の後に「書き込めましたか?」が追記されます。
なお、PHP5からは、fopen()関数でファイルをオープンせずに、ファイル名と書き込む値を指定するだけでファイルへの書き込みをが行えるfile_put_contents()関数という関数が追加されました。
<?php
$file = "c:\template\sample.txt";
$data = "大丈夫です。"
file_put_contents( $file, $data, FILE_APPEND );
?>
sample.txtを表示します。書き込めましたか?大丈夫です。
file_put_contents()関数の第1引数にファイルの名前、第2引数に書き込むデータを指定します。第3引数に「FILE_APPEND」を指定すると「追記」、「LOCK_EX」を指定すると「注)排他的ロック」、省略すると「上書き」になります。