カウンター(php)2php事始め2   
home > elec > Cnt2

 phpを始めてカウンターが動かせるようになり、ちょっといい気分になっていましたが、実際本番のページにどうやって載せるか迷っていました。
 このまま載せると、ファイルを*.phpにしなくてはなりません。*.htmlにする別の方法を考えました。

≫ php2

1)思いついた構成でカウンターが機能するか
 カウンターの機能は数値を保存するcnt01.txtの中身を1プラスさせれば良いわけですから、表示させないでこのカウンターの数値だけを1プラスするだけのプログラムを作り、それだけしてプログラムを抜けられるプログラムを作リました。超簡単プログラムです。
 そしてページ立ち上げ時に、このプログラムをトリガーすれば、数値は一瞬で繰り上がりそれで表示はしませんがカウンターの繰り上げ数は保持出来ます。
 そして、あとからcnt01.txtの値を読むプログラムを別途作れば良いと云う考えです。
 ですがこれがうまく行くかどうか分からなかったので、ちょっとした試しテストをしてみました。
 最初は、upcnt.phpが単独で機能するかどうかを確かめて見ました。
 xamppの中に左図のような構成でファイルを構成します。ブルーの部分が新規作成したところです。
 下記index.html(起動用の スクリプトを挿入したhtml)は一番外側におき、 whcというフォルダーを作り中にupcnt.phpとcnt01.txt(初期内容は0)を入れます。
upcnt.php
1|
2|
3|
4|
5|
6|
7|
8|
<?php
$dtfile='cnt01.txt'; //データファイルを指定
$dt = file($dtfile); //データファイルの中身を読む
$dt[0]++; //1をたす
$fp=fopen($dtfile, "w"); //cnt01.txtをアクセス
   fwrite($fp, "$dt[0]"); //cnt01.txtに$dt[0]を上書きする
   fclose($fp); //ファイルを閉じる
?>
 前回のお試しのcnt01.txtの中身にに1を足して再びcnt01.txtに戻してやる所だけを取り出してupcnt.phpを作りました。index.htmlの中のscriptでupcnt.phpを起動し、cnt01.txtを読み込んで1をプラスし、その値をcnt01.txtに上書きする。終わったらプログラムからぬけます。cnt01.txtは+1されているはです。
 これをメインのプログラムにトリガープログラム(script)にupcnt.phpをトリガーするプログラムとして仕込んでおきます。ページが呼ばれた時だけ一瞬アクセス、すぐにupcnt.phpから脱けてindex.htmlプログラム戻り普通にページを立ち上げます。外から見るとページを立ち上げただけでcnt01.txtの中身は1プラスされた数値が残るという風に動けば思い通りと云うことになります。
 このcnt01.txtを後から別のプログラムで読み込んで、アクセス数を見ようと思います。
起動用にはネットで色々調べ幾つか試みましたが、
<script src="/wch/upcnt.php"></script>
を使う事にしました。これをindex.htmlファイルの<body>の真下にに埋め込んで試して見ました。scriptのおいしいとこ取りりになっちゃいました。

index.html
 1|
2|
3|
4|
5|
6|
7|
8|
9|
10|
11|
12|
13|
<html>
 <head>
  <title>カウンターお試し</title>
 </head>
 <body>
  <script src="./whc/upcnt.php"></script>
<center>
  <h1>カウンターお試し</h1>
 <br>
  <b>リフレッシュボタンを押してください!!</b>
</center>
 </body>
</html>
  <body>の下に6行目の<script src="./wch/upcnt.php"></script>を入れ、
./whc/upcnt.phpを起動させます。
 そして./whc/upcnt.phpを通過してcnt01.txtは、+1の状態になります。

 この方法が有効かどうか試して見ます。
 まず、xamppを起動し、apachボタンを押しブルーになってからcnt01.txtの数値を確認し、ブラウザを立ち上げ、ブラウザのアドレスの枠にhttp://localhost/tryphp/index.htmlと入力します。index.htmlが立ち上がったらリフレッシュボタンを数回押します。
 後、cnt01.txtの中身を確認し数値が押した数だけ上がっていることが確認できたら、この方法は成功で最初のステップは完了です。
 (注)前回のwatchcnt.phpのお試しの時のようにhttp://localhostを通して立ち上げないとphpは正常な動作をしてくれません。

 実際にサーバーに実装してもいちいちcnt01.txtファイルを見に行っているのでは実用になりません。よって次がこのファイルだけを見に行くソフトを作りました。

2)この構成でカウンターの数値をindex.html外から閲覧する
トリップメータ付きカウンターです。
 cnt01.txtは今までどおり最初は0を入れておき、単にカウント数を入れておくだけ。
 cnt02.txtは、cnt01.txtのカウントを一時的に入れておくファイルこれも0を入れておきます。
 when.txtは、cnt02.txtを保存した時の時刻を保存しておくファイルです。これも0を入れて起きます。
 upcnt.phpは前述のカウントアッププログラム。
 rec-cnt.phpはcnt01.txtの値をcnt02.txtに上書きコピーするプログラム。これを実行するとトリップスタートです。
 cnt0reset.phpは、cnt01.txtとcnt02.txtに0を上書きするプログラムです。これはなくても良いかもです。
watchCnt.php
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|
62|
63|
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-type" content="text/html">
  <meta http-equiv="refresh" content="3;
    URL=http://localhost/tryphp/wch/watchcnt.php">
<title>お試し覧数確認</title>
</head>
<body>
<b>お試し覧数確認一覧</b>
<br>
<?php
date_default_timezone_set('Asia/Tokyo');
$dtnow = date("Y/m/d H:i");
//$dtn = file($dtnow);
$dtwhen = './when.txt';
$dtw = file($dtwhen);
<br>
$dtfile='./cnt01.txt'; //データファイルを指定
$dt = file($dtfile);
$dt2file='./cnt02.txt'; //前時データファイルを指定
$dt2 = file($dt2file);
$dt3 = $dt[0] - $dt2[0];
// 下記37行目まで時間計算
$dtnw = strtotime($dtnow);
$dtbf = strtotime($dtw[0]);
$dtotal = $dtnw - $dtbf;
$diffTime['seconds'] = $dtotal % 60; // sec
$dtminnn = $dtotal - ($dtotal % 60); // nokori total sec
$dtmint = $dtminnn / 60;
$diffTime['minutes'] = $dtmint % 60; // min
$dthourt = $dtmint - ($dtmint % 60); // total hour
$dthr = $dthourt / 60;
$dthour = $dthr % 24; // hour
$dtdday = $dthr - ($dthr % 24); // day
$dtday = $dtdday / 24;
?>
<?php echo "今回の閲覧時間    " . $dtnow; ?>
<br>
<?php echo "前回カウント記録日時 " . $dtw[0] . "<br>"; ?>
<?php echo "実質経過時間     " . $dtday . "日 " . $dthour . "時間" . $diffTime['minutes'] . "分"; ?>
<table border="1"><tr>
   <td align="center" width="130">項 目</td>
   <td align="center" width="90">現 在</td>
   <td align="center" width="90">前 回</td>
   <td align="center" width="60">実増分
</td></tr><tr>
   <td align="center">ホーム</td>
   <td align="right"><?php echo $dt[0]; ?></td>
   <td align="right"><?php echo $dt2[0]; ?></td>
   <td align="right"><?php echo $dt3; ?>
</td></tr> </table>
<br>
<br>
<a href="./rec-cnt.php" onclick="window.open('./rec-cnt.php','今回分記録','width=300, height=300,noopner'); return false;"><b>今回分記録</b></a>
    
<a href="./rec-cnt.php" onclick="window.open('./cnt0reset.php','カウンターを0にします','width=300, height=300,noopner'); return false;"><b>カウンターを0にします</b></a>
</body>
</html>
 6-7行目のは、いちいちリフレッシュボタンを押さなくても住むように3秒ごとに自動でリフレッシュします。
 14行目のdate_default_timezone_set('Asia/Tokyo');は絶対必要です。入れないととんでもない時間が現れます。(多分ロンドン時間)
 59行目は全角スペースを3個-5個入れておき"今回分記録"と"カウンターを0にします"の間を調節します。下図のようなフォームができあがります。
 現在はcnt01.txt(積算値)の値、前回はcnt02.txtの値前回"今回分記録”を押した時の値、実増分はcnt01.txtの値ーcnt02.txtの値です。そして実増分は0(トリップメーターの値)になります。
  今回分記録を押すとトリップメーターがリセットされるように実増分が0リセットされます。
 日にちの計算を確かめるため9日ほどほったらかしました。

rec-cnt.php
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|
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-type" content="text/html">
  <title>お試し閲覧数今回記録</title>
</head>
<body>
<center>
<p>今回分の記録を完了しました!</p>
<?php
date_default_timezone_set('Asia/Tokyo');
$when = date("Y/m/d H:i");
//$when = hiduke;
$dtfile='./cnt01.txt'; //データファイルを指定
$dt = file($dtfile);
$dt2file='./cnt02.txt'; //データファイルを指定
$dt2 = file($dt2file);

$fp=fopen("./cnt02.txt", "w");
fwrite($fp,"$dt[0]");
fclose($fp);

$fp=fopen("./when.txt", "w");
fwrite($fp,"$when");
fclose($fp);
?>

<input type="button" onclick="window.close();" value="閉じる">
</center>
</body>
</html>
 rec-cnt.phpは単にcnt01.txtの数値をcnt02.txtに上書きします。

cnt0reset.php
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|
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-type" content="text/html">
<title>お試し閲覧数0リセット</title>
</head>
<body>
<center>
<p>閲覧数を0にリセットしました!!!</p>
<?php
date_default_timezone_set('Asia/Tokyo');
$when = date("Y/m/d H:i");

$dt = 0;
$fp=fopen("./cnt01.txt", "w");
fwrite($fp,"$dt");
fclose($fp);

$fp=fopen("./cnt02.txt", "w");
fwrite($fp,"$dt");
fclose($fp);

$fp=fopen("./when.txt", "w");
fwrite($fp,"$when");
fclose($fp);
?>

<input type="button" onclick="window.close();" value="閉じる">
</center>
</body>
</html>
 cnt0reset.phpは単にcnt01.txtとcnt02.txtに0を挿入し、when.txtに今の時刻を保存するだけです。サーバーに実装する時にはこのプログラムはいらないかもしれません。

 今回めんどうだったのは、経過時間の計算でした。何度もエラーを出しやっとたどり着いた感じです。
 phpでファイルの読み書きはpythonに似ていました。読みはphpの方が簡単で一行で出来てしまいました。書き込みは殆ど同じでした。
 phpもお勉強としてとらえると取っつきにくいですが、こんな風に遊びながらやっている内に、phpが身近に感じられるようになり面白くなってきました。
 やっぱり習うより慣れろですね。!!!

 後日自分のホームページに実装し、眺めて見ると思ったより便利でした。またどんな物が沢山読まれているかも一目で分かり一歩下がって全体を見る!みたいな気持ちになっています。
 ちなみに左記の表は、本物に実装して得られたものの一部です。
 ページを開かなくても閲覧数が分かるのですごく便利です。実質経過時間に対して実増分が分かれば良いわけで、車のトリップメーターを思い出して頂けると分かりやすいと思います。

1   2

jji工作室にもどる


お問い合わせ