ファイル の読み書き

ファイルのオープン 

ファイルへの書き込み(追記) 

《サンプル》

<?php
$file_name = "sample.txt";
//ファイルを追記モードで開く
//die() は、message を出 力し、スクリプトの処理を終了する
$file = fopen($file_name, "a") or die("OPENエラー $file_name");

//ファイルをロック(同時アクセスがないよう)
flock($file,LOCK_EX);

//文字列を準備(改行コード含む)
$moji = "テスト文字\n";

//データを書き込む
fputs($file,$moji);

//ロック解除
flock($file,LOCK_UN);

//ファイルを閉じる
fclose($file);
?>

 

ファイルへの書き込み(上書き) 

<?php
$file_name = "sample.txt";
//ファイルを上書きモードで開く
$file = fopen($file_name, "w") or die("OPENエラー $file_name");
flock($file,LOCK_EX);
//文字列を準備
$moji = "ABCEDFG";
//データを書き込む
fputs($file,$moji);
//ロック解除
flock($file,LOCK_UN);
//ファイルを閉じる
fclose($file);
?>


ファイルのデータを表示する
 

上の項で書きんだファイル「sample.txt」の内容を表示します。(ファイルポインタが終端に達するまで)
fgets()関数は、ファイルから1行(改行文字まで)読み込みます。改行文字を検出できないときは、パラメータで指定した長さ-1バイトに達したときまで読み込まれます。

<?php
$file_name = "sample.txt";
//ファイルを読み取りモードで開く
$file = fopen($file_name, "r") or die("OPENエラー $file_name");
//ファイルをロック
flock($file,LOCK_EX);
//ファイルのデータを表示する
while (!feof($file)){
$moji = fgets($file, 1000);
echo $moji."<br>";
}
//ロック解除
flock($file,LOCK_UN);
//ファイルを閉じる
fclose($file);
?>

次の例では、ファイルのデータを一度配列入れてから表示しています。

<?php
$file_name = "sample.txt";
//ファイルを読み取りモードで開く
$file = fopen($file_name, "r") or die("OPENエラー $file_name");
//ファイルをロック
flock($file,LOCK_EX);

//ファイルのデータを配列に入れる
$count = 1;
while (!feof($file)){
$moji[$count] = fgets($file, 1000);
$count = $count + 1;
}

//配列のデータを表示する
for ($n = 1; $n<=$count;$n++) {
echo $moji[$n]."<br>";
}

//ロック解除
flock($file,LOCK_UN);
//ファイルを閉じる
fclose($file);
?>

 

ファイルのデータを1バイトだけ表示する 

fgetc()関数を使って、指定されたファイルから1バイト読み込みます。ファイルポインタは後ろに移動します。

<?php
$file_name = "sample.txt";
//ファイルを読み取りモードで開く
$file = fopen($file_name, "r") or die("OPENエラー $file_name");

//ファイルのデータを1バイト表示する
$moji = fgetc($file);
echo "読み込んだデータ:".$moji;

//ファイルを閉じる
fclose($file);
?>

 

指定バイト数だけ表示する 

fread()関数は、ファイルから指定バイト数だけを読み込みます。指定した文字数より小さい場合はファイル全体が表示されます。

<?php
$file_name = "sample.txt";
//ファイルを読み取りモードで開く
$file = fopen($file_name, "r") or die("OPENエラー $file_name");

//ファイルのデータを4」 バイト表示する
$moji = fread($file,4);
echo "4バイトだけ表示: ".$moji;

//ファイルを閉じる
fclose($file);
?>

 

データをまとめて表示する 

filesize()関数を使うと、ファイルサイズを調べてすべての内容を読み込むことができます。1つの変数にファイルの内容をすべて取り込むので、あまり大きなサイズには不向きです。

<?php
$file_name = "sample.txt";
//ファイルを読み取りモードで開く
$file = fopen($file_name, "r") or die("OPENエラー $file_name");

//ファイルのデータをまとめて取得
$moji = fread($file,filesize($file_name));
echo "ファイルの内容: ".$moji;

//ファイルを閉じる
fclose($file);
?>

 

アクセスカウンタ 

<?php
//カウンタファイル名
$cntfile = "count.txt";
//カウンタ桁数
$cnt_len = 5;

//カウンタファイルが存在する場合はカウンタ値を読み取る
if(file_exists($cntfile)){
$file = fopen($cntfile, "r+") ;
$count = fgets($file,$cnt_len);
$count = $count + 1;
}
//カウンタファイルが存在しない場合は、新規作成して1をセットする
else{
$file = fopen($cntfile,"w");
$count = 1;

}
//ファイルポインタを先頭に
rewind($file);

//ファイルをロック
flock($file,LOCK_EX);

//カウンタ値を書き込む
fputs($file,$count,$cnt_len);

//ファイルロック解除
flock($file, LOCK_UN);

//ファイルを閉じる
fclose($file);

//カウンタ値を出力
echo "カウンター値 > .$count;
?>