1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
/** -------------------------------------------------------------------------------
* ファイルシステム:ファイル排他制御のflockの利用例
* 2015.09.17 作成 yoshi of CXMedia Inc.
* -------------------------------------------------------------------------------- */
header("Content-type:text/plain; charset=UTF-8");
// カウント保存ファイルのパス
$filepath = 'data/count.txt';
/* ----------【注釈】----------------------------------------------------------------
* -- PHP5.2.6以降でないと、openモードの「cやc+」使えないので、新規作成のファイルは、
* -- touch関数により作成して、「r+」モードでopenするプログラムを以下に示します。
* ----------------------------------------------------------------------------------
// 「r+」モードでオープン(ファイルが存在しない場合には新規作成)
if( !file_exists($filepath) ){
touch($filepath);
}
$fh = fopen( $filepath, "r+" );
* ---------【上記の「r+」モードを適用した場合は、以下2行を削除する】---------------- */
// 「c+」モードでオープン(ファイルが存在しない場合には新規作成)
$fh = fopen( $filepath, "c+" );
// --- 排他ロックの開始 ---
@flock($fh,LOCK_EX);
/* -----------------------------------------------------------
* fgets ( handle [,length ] )
* handle で指定したファイルポインタから
* 最大 length - 1 バイト読み出し、その文字列を返します。
* ----------------------------------------------------------- */
// 9桁値の読み込みとカウントアップ
if( ($count = fgets($fh, 10)) ){
$count++;
} else {
// データなしのときの初期値設定
$count = 1;
}
// ファイルポインタを先頭に戻す
rewind( $fh );
/* -------------------------------------------------------------------------------
* fwrite ( handle ,string [,length ] )
* handle で指定したファイルポインタから、lengthバイト数分の文字列書き込み
* lengthパラメータが与えられている場合、lengthバイト数分の書き込みが完了したか、
* stringが終わりに達したかのいずれか早い方の事象により書き込みは中止されます。
* ------------------------------------------------------------------------------- */
// ファイルのカウント値の書き込み
if(!fwrite( $fh, $count)){
echo "エラー:fwrite処理\n";
}
// --- ロックの解除 ---
flock($fh,LOCK_UN);
// ファイル閉じる
fclose( $fh );
// カウント値の表示
echo "■更新したカウント値:$count\n";
?>