質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

3412閲覧

PHPのアクセスカウンター、キャッシュをクリアしなくても同一アカウントからのアクセスをカウント出来るようにしたい

msm

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/11/05 09:13

編集2018/11/05 09:23

クライアントから、キャッシュをクリアしなくてもページを開く度にアクセスカウンターがカウントされるようににしたいという依頼がございました。
このアクセスカウンターは、同一アカウントからのアクセスは24時間に1回までという風に設定してあるのですが、
そのような依頼があった為、困っています。
そもそも、同一IPアドレスから同日にアクセスした際に、キャッシュをクリアしなくても、単純にページを見た回数だけカウントされる様に表示する事は可能なのでしょうか。
当方PHPには無知なものでして、大変困っております。

どなたかおわかりの方がいらっしゃいましたら、お教えいただけますでしょうか。何卒宜しくお願い申し上げます。

出力先index.php****

<div class="mt-7 cf"style=""> <iframe src="../count/count.php" height="70" width="140" frameborder="0" scrolling="no" style="float:right;"> </iframe></div>

PHP
count.php

<?php ``` ####################################################################################### ### # PHPカウンタープログラム # IPアドレスで判定していますので、同一IPアドレスではカウントされませんが、 # 間にほかの人のアクセスがあればカウントします。ユニーク数というよりはセッション数になります。 # インラインフレームでページに埋め込み、またはphpファイルに直接埋め込むことも可能です。 # 改造や改変は自己責任で行ってください。 ####################################################################################### header("Content-Type: text/html;charset=UTF-8"); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name='robots' content='noindex,nofollow'> </style> </head> <body> <?php $keta = 5; //カウンタの最低桁数 ※カウントがこの桁を超えても大丈夫(ちゃんと自動で桁が上がります) $base_day = date("Y/m/d"); //日付の取得 $remoteAddr = $_SERVER['REMOTE_ADDR']; //IP取得 $filepath = "count.dat"; $fp = fopen($filepath,"r+b"); flock ($fp,LOCK_EX); $line = fgets($fp); //fclose($fp); list($reg_day, $total, $today, $yesterday, $reg_remoteAddr) = explode(",", $line); if ($base_day != $reg_day){ $yesterday = $today; $today = 0; } if ($remoteAddr!=$reg_remoteAddr) { $total++; $today++; ftruncate($fp,0); rewind($fp); fwrite($fp,"$base_day,$total,$today,$yesterday,$remoteAddr"); fclose($fp); } echo "<div id=\"total\">"; printf("%0{$keta}d", $total); echo "</div>"; echo "<div id=\"count\">"; echo "本日<span class=\"count\">{$today}</span>\n"; echo "&nbsp;昨日<span class=\"count\">{$yesterday}</span>"; echo "</div>"; ?> </body> </html> ```

DAT
count.dat

2012/09/30,0,0,0,127.0.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2018/11/05 09:15

コードはコードブロック(```)で囲んでください。
guest

回答4

0

ベストアンサー

こうすれば期待通りに動くんじゃないですかね

<?php ####################################################################################### ### # PHPカウンタープログラム # IPアドレスで判定していますので、同一IPアドレスではカウントされませんが、 # 間にほかの人のアクセスがあればカウントします。ユニーク数というよりはセッション数になります。 # インラインフレームでページに埋め込み、またはphpファイルに直接埋め込むことも可能です。 # 改造や改変は自己責任で行ってください。 ####################################################################################### header("Content-Type: text/html;charset=UTF-8"); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name='robots' content='noindex,nofollow'> </style> </head> <body> <?php $keta = 5; //カウンタの最低桁数 ※カウントがこの桁を超えても大丈夫(ちゃんと自動で桁が上がります) $base_day = date("Y/m/d"); //日付の取得 $remoteAddr = uniqid($_SERVER['REMOTE_ADDR']); //IP取得 //平成30年11月5日IPは気にしないよう修正 $filepath = "count.dat"; $fp = fopen($filepath,"r+b"); flock ($fp,LOCK_EX); $line = fgets($fp); //fclose($fp); list($reg_day, $total, $today, $yesterday, $reg_remoteAddr) = explode(",", $line); if ($base_day != $reg_day){ $yesterday = $today; $today = 0; } if ($remoteAddr!=$reg_remoteAddr) { $total++; $today++; ftruncate($fp,0); rewind($fp); fwrite($fp,"$base_day,$total,$today,$yesterday,$remoteAddr"); fclose($fp); } echo "<div id=\"total\">"; printf("%0{$keta}d", $total); echo "</div>"; echo "<div id=\"count\">"; echo "本日<span class=\"count\">{$today}</span>\n"; echo "&nbsp;昨日<span class=\"count\">{$yesterday}</span>"; echo "</div>"; ?> </body> </html>

僕がこのコードをレビューしたら持ってきた奴に膝蹴り食らわせますけど

投稿2018/11/05 10:15

namda

総合スコア705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msm

2018/11/05 13:34

出来ました。本当にたすかりました。ありがとうございます。
guest

0

カウンタを別ファイルにして、ajaxでcache:falseで毎回呼び出してみては?
(必要であればajaxの結果をページのカウンタとして表示)

投稿2018/11/05 09:29

yambejp

総合スコア114581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

teratailで得た回答で問題が起こっても責任を負えないのでご注意ください。


そもそも、同一IPアドレスから同日にアクセスした際に、キャッシュをクリアしなくても、単純にページを見た回数だけカウントされる様に表示する事は可能なのでしょうか。

可能です。
むしろIPアドレスを見て判定しなくても良い分、実装は楽です。

プログラムのコメントに

IPアドレスで判定していますので、同一IPアドレスではカウントされませんが、

間にほかの人のアクセスがあればカウントします。ユニーク数というよりはセッション数になります。

とあるので、プログラム内で意図的にカウントに制限をかけているようです。
ついでに言えば「同一アカウントから」という制限ではなく、「同一IPから」という制限ですし、
直前に別な人がアクセスしていた場合は同じIPからでもカウントされているような気がします。


コード上でIPアドレスで判定している箇所があれば、その分岐を取り除けば単純なアクセス数をカウントできるかと思います。

投稿2018/11/05 09:28

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ご回答いただきまして、ありがとうございます。
実際の記述コードをお教えいただけませんでしょうか?
よろしくお願い申し上げます。

投稿2018/11/05 10:13

msm

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/05 13:22

ここはコードを恵んでもらうサイトじゃないよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問