php講座

ファイル操作

指定のファイルの有無

bool file_exists(string filename)

指定の場所に指定の名前のファイルfilenameがあるかどうかを検証する。あればtrue、無ければfalse。

ファイルを読み書きする

int fopen(string filename,string mode[r|r+|w|w+|a|a+])

ファイルfilenameを指定のモードmodeで開く。

mode
r読み込みモード。ファイルの先頭から読み込む。
r+読み込み/書き込みモード。ファイルの先頭から書き込む(上書き)。
w書き込みモード。ファイルを空にしてから書き込む。ファイルが存在しなければ作成する。
w+読み込み/書き込みモード。ファイルを空にしてから書き込む。ファイルが存在しなければ作成する。
a書き込みモード。ファイルの終端から書き込む。ファイルが存在しなければ作成する。
a+読み込み/書き込みモード。ファイルの終端から書き込む。ファイルが存在しなければ作成する。

戻り値(int)はファイルポインタfp(ファイルのメモリ上の位置=ファイルの実体)。

bool flock(int fp,string mode[1|2|3|4])

ファイルの排他制御などを行う。

mode
1読み込み用ロック
2書き込み用ロック(排他制御)
3ロック解除
string fread(int fp,int length)

ファイルfpからlengthバイト読み込む。

戻り値(string)は読み込んだ文字列。

int fwrite(int fp, string string)

文字列stringを指定のファイル(fp)に書き込む。

戻り値(int)は書き込んだバイト数。

bool fclose(int fp)
ファイルfpを閉じる

ファイルの中身を全部読み込む

array file(string filename)
ファイルのデータを配列として全部読み込む。
counter.php
<?php
$file_name = "counter.dat";  //同じディレクトリ上にあるcounter.datというファイルにデータを保存

if(!file_exists($file_name)){ //counter.datというファイルが存在しなければ
    $count[0] = 0; //はじめてのアクセスということでカウンターを0で始める
}else{
    $count = file($file_name);//counter.datがあればその中身を読み込む。fread()は面倒なのでfile()を用いている。
}

$count[0]++;

$fp = fopen($file_name,'w');//書き込むためにcounter.datをオープンしてメモリ上にその中身を展開する
flock($fp,2);//排他制御開始
fwrite($fp,$count[0]);//現在の訪問回数(counterの数値)を書き込む
flock($fp,3);//排他制御終了
fclose($fp);//ファイルを閉じる
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8" />
    <title>簡易カウンター</title>
</head>
<body>
<h1>簡易アクセスカウンタ</h1>
<p class="result">
<?php
print 'あなたは、'.$count[0].'人目の訪問者です';
?>
</p>
<footer>
<address>カウンター</address>
</footer>
</body>
</html>