Written by Manabu Bannai

【PHPの基礎】訪問者数を表示する『カウンター』を作成する方法

PHP PROGRAMMING

PHPで訪問者数を数えるカウンターを作成する方法です。
備忘録的なまとめです。

書き込みようのファイルを作成する

新規作成ファイル:index.php


<?php

function set_count( $file_name = "counter.txt"){
	if( file_exists($file_name) ){
		// ファイルを読み込む
		// カウンターの数字を増やす
	}else{
		// ファイルが存在しなかった場合の処理
		// ファイルを作成する
		// "w+" ... 読み込み/書き出し用にオープンする
		$handle = fopen($file_name , "w+");
	}
}
set_count();

上記を実行するとcounter.txtが生成されます。

カウンターの初期値を設定する


function set_count( $file_name = "counter.txt"){
	if( file_exists($file_name) ){
		// ファイルを読み込む
		// カウンターの数字を増やす
	}else{
		// ファイルが存在しなかった場合の処理
		// ファイルを作成する
		// "w+" ... 読み込み/書き出し用にオープンする
		$handle = fopen($file_name , "w+");
		
		// カウンターの初期値を設定する
		fwrite($handle, 1);
		
		// ファイルを閉じる
		fclose($handle);
	}
}

set_count();

一度、counter.txtを削除して、上記プログラムを実行すると、
counter.txtに1が書き込まれます。

ファイルを読み込む


if( file_exists($file_name) ){
	// ファイルを読み込む
	$handle = fopen($file_name, "r");
		
	$count = fread($handle, 20);
	echo $count; die();
		
	// カウンターの数字を増やす

ここまでのプログラムを、die();を使って実行してみます。
結果は『1』が表示されます。

※fread(第1引数, 第2引数)
第1引数:handleファイルポインタ
⇒読み込みたいファイルのファイルポインタを指定します。
第2引数:length
⇒最大 length バイトまで読み込む。

次にgettypeで文字形式を確認してみます。

echo gettype($count); die();

出力結果には『string』が表示されます。
しかし、カウンターでは数字を扱うため、『integer』にしなくてはいけません。
よって、以下のように変更します。


$count = (int)fread($handle, 20);
echo gettype($count); die();

カウンターの数字を増やす


if( file_exists($file_name) ){
	// ファイルを読み込む
	$handle = fopen($file_name, 'r');
		
	// カウンターの数字を増やす
	$count = (int)fread($handle, 20) + 1;

カウンターの数字をファイルに書き込む


// カウンターの数字を書き込む
// "w" ... 書き込みモード
$handle = fopen($file_name, 'w');
fwrite($handle, $count);
		
// ファイルを閉じる
fclose($handle);

set_countファンクションでカウントされた数字を出力する

以下のように変更していきます。


<?php

function set_count( $file_name = "counter.txt"){
	if( file_exists($file_name) ){
		// ファイルを読み込む
		$handle = fopen($file_name, 'r');
		
		// カウンターの数字を増やす
		$count = (int)fread($handle, 20) + 1;
		
		// カウンターの数字を書き込む
		// "w" ... 書き込みモード
		$handle = fopen($file_name, 'w');
		fwrite($handle, $count);
		
		// ファイルを閉じる
		fclose($handle);
		

	}else{
		// ファイルが存在しなかった場合の処理
		// ファイルを作成する
		// "w+" ... 読み込み/書き出し用にオープンする
		$handle = fopen($file_name , 'w+');

		// ここを追加
		$count = 1;
		
		// カウンターの初期値を設定する
		
		// ここを変更
		// fwrite($handle, 1);
		fwrite($handle, $count);
		
		// ファイルを閉じる
		fclose($handle);
	}
	
	// ここを追加
	return $count;
}

echo set_count();

完成コードを以下のように短くすることもできます


function set_count( $file_name = "counter.txt"){
	if( file_exists($file_name) ){

		// ファイルを読み込む
		// カウンターの数字を増やす
		$count = (int)file_get_contents($file_name) +1;
		
		// ファイルに書き込む
		file_put_contents($file_name, $count);		

	}else{
		// ファイルが存在しなかった場合の処理
		// ファイルを作成する
		$handle = fopen($file_name , 'w+');
		$count = 1;
		
		fwrite($handle, $count);
		fclose($handle);
	}
	
	// ここを追加
	return $count;
}

カウンターをページに表示する

まず、index.phpに以下を追加します。

require "index.tmpl.php";

次に、index.tmpl.phpを作成します。
新規作成ファイル:index.tmpl.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
	<meta charset="utf-8" />
	<title>カウンター</title>
	<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1>カウンター</h1>
<p>あなたは<?php echo set_count(); ?>番目の訪問者です。</p>
</body>
<script type="text/javascript" src="myscript.js"></script>
</html>

以上で完成です( ◜◡‾)

※P.S:無料メルマガで発信中:過去の僕は「ブログ発信で5億円」を稼ぎました。次は「30億円」を目指します。挑戦しつつ、裏側の思考を「メルマガ」から発信します。不満足なら1秒で解約できます。無料登録は「こちら」です。