ホームページ > バックエンド開発 > PHPチュートリアル > php_PHP チュートリアルでオンラインの人数を取得する

php_PHP チュートリアルでオンラインの人数を取得する

WBOY
リリース: 2016-07-13 17:23:46
オリジナル
1167 人が閲覧しました


フォーラムで誰かがオンラインの人数を数える方法を尋ねました。私も何が最善の方法なのか分かりません。以下に当サイトの実装原則を記載させていただきましたので、ご参考までに。これは単なる私の方法であり、決して最善のものではありません。専門家が私を修正してくれることを願っています。

実際、同時にオンラインの人数を正確にカウントすることは非現実的です。これは、HTTP プロトコルがステートレス プロトコルであるためです。クライアントがサーバーにリクエストを送信すると、ページが完全にロードされたときなど、セッションが終了すると、サーバーはすぐに新しい TCP/IP 接続を確立します。一般に、オンラインの人数は、HTTP プロトコルに基づく同時接続の数ではなく、一定期間内にサイトに同時にアクセスした人の数を指します。

まず、訪問者がどのようにウェブサイトにアクセスするかを見てみましょう。対象の Web サイトのアドレスをブラウザのアドレス バーに入力し、一定期間その Web サイトのページを閲覧し続けます。最後にブラウザを閉じるか、新しい URL を入力すると、閲覧が終了します。サーバー側では、訪問者がいつ到着したかを知ることができ、訪問者がいつページを閲覧しているかを知ることもできますが、いつ離れるかをどうやって知ることができるでしょうか? HTTP プロトコルはステートレスであるため、それを知る方法はありません。一般的には、訪問者が最後にサイトのページを閲覧した時刻を記録することです。訪問者が特定の期間内に新しいアクションを行わなかった場合、その訪問者は去ったとみなされます。

上記の考えに基づいて、データベースはテキストファイルなどの他の方法より効率的であるため、データベースを使用するのが最善であると思います。以下の例では MySQL を使用していますが、他のタイプのデータベース システムでも簡単に使用できます。次に、この PHP ファイルをすべてのページで呼び出すと、データが更新される一方で、オンラインの人数が表示されます。ただし、問題は、人々が同時に訪問するのにどれくらいの時間がかかるかということです。一般的には 30 分、つまり 1800 秒です。具体的な時間は Web サイトの状況に応じて決定されます。この時間が長いほど、より多くの同時オンライン人数がカウントされます。このサイトは15分900秒です。訪問者を表す良い方法は、IP アドレスで表すことです。ダイヤルアップ インターネット アクセスの場合、同じ IP アドレスが割り当てられた 2 人のユーザーが短時間に同じ Web サイトを閲覧する可能性は非常に低いです。

まず、MySQL ツールを使用してテーブルを作成します:

CREATE TABLE ccol(
id integer not null auto_increment, #recorded ID
ip char(15) not null, #visitor's IP address


dtstamp datetime not null、#最終アクセス時刻
uri char(255)、#訪問者によってリクエストされたURI
主キー(id)

次に、PHPコードを書きます:


ファイル :ccol.php - ConCurrent OnLine 統計
目的 : 同時にオンラインを閲覧している人の数をカウントするため
作成者 : Hunte、hunte@phpuser.com
更新日 : 2000-4-25
*/

$duration =1800;
require "db.php";
//DBSQL が含まれます。詳細については、私の他の記事を参照してください
$ccol=new dbSQL;
$ccol->query(" DELETE FROM ccol WHERE (UNIX_TIMESTAMP(NOW ())-UNIX_TIMESTAMP(dtstamp))>$duration");
//30 分より古いレコードを削除
$ccol->query("SELECT * FROM ccol WHERE ip=$REMOTE_ADDR ");
//現在の IP がテーブルに存在するかどうかを判断しますか? if ($ccol->nf())//はい?
{
$ccol->next_record();// 見つかったレコード配列のポインタを下に移動
$id=$ccol->f(id);
$ccol->query("UPDATE ccol SET dtstamp=now( ) , uri=$REQUEST_URI WHERE id=$id");
//最終アクセス時刻とアクセスページを設定します
}
else//いいえ
{
$ccol->query("INSERT INTO ccol VALUES (0, $ REMOTE_ADDR, now(), $REQUEST_URI)");
}

$ccol->query("SELECT COUNT(*) AS ccol FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))//30 分以内のレコードを検索します。次の WHERE 句はオプションです - 時間を超えたものは削除されています
$ccol->next_record()
echo "オンラインの人数:", $ccol ->f(ccol);
$ccol->free_result(); ?>

使い方は?サイトのすべてのページでこのプログラムを呼び出します。例:
--index.php
...




...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート