これを他の誰かのために解決するために、ここでは。コードを順番に組み立てて、途中で指示を使用してください。 PHPのGD拡張が必要です。
ウェブデーモンがそれに書き込むことができることを確認し、Webルートディレクトリを作成します。
mkdir liveusers
は(タッチコードを PHPスクリプト(例えばvlive.php)を作成します。 btw。touchは標準の* nixコマンドです。system()、passthru()、exec()を使いましょう。それは例えば、IP +セッションIDのためのタッチ一意のファイル名とそのディレクトリ内のファイルは、一緒にconcat'dています
<?php
exec("touch ". $_SERVER['DOCUMENT_ROOT']."/liveusers/". md5($_SERVER['REMOTE_ADDR'].session_id())); /* SECURITY RISK */
さて、同じファイルに、私たちはして出力するJPEG仕上げそれを必要とします適切なheader()の私はピクセルという名前の1x1ピクセルを入れます。ウェブルートの/画像/ディレクトリにJPG、他に何かをして自由に感じる:
$NewImage = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']. "/images/pixel.jpg");
header("Content-type: image/jpeg");
imagejpeg($NewImage);
?>
保存PHPファイルを、それは便利得るためにあなたの文書に標準のHTMLタグを配置します。
<img src="/vlive.php" alt="Imagination!" />
これで純粋なPHPになると、ページをキャッシュするだけで、生きているユーザファイルはほとんど 'になるでしょう。これを行うことで、「生きている」ユーザーを数え、サイト上でフルページキャッシュシステムを使用することができます。
これで、ビジターが一意のファイルにアクセスするたびに、直前に到着したばかりの場合、そのユーザーのファイルが作成されます。他のページにアクセスしている場合は、その同じタッチコマンドで。
それは便利な取得する場所これは、次のとおりです。
異なるPHPスクリプトで(のは、readvlive.phpをしましょう):
<?php
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
echo "Live Visitors: ". $livenum;
?>
は、今度は、あなたが好きなHTML要素にこのスニペットを含めてみましょうそれを見るには:
<?php include($_SERVER['DOCUMENT_ROOT']. "/readvlive.php"); ?>
これで、アクセス時間が変更されたユニークなファイルの数が印刷されるようになりました10分前。ここ10分間のライブユーザーです...
ここではフルページキャッシュを使用すると、キャッシュされたライブ番号がこれらのドキュメントに凍結される可能性があるため、むしろ迷惑になり、役に立たなくなります。このために私はPrototypeJS(グーグルそれが)、あなたは自分の空想AJAXツールを使用し、その後、</body>
タグの上にこれを置くこの
<script src="/js/prototype.js" type="text/javascript"></script>
<head></head>
の間を置いてお勧めします。 <span id="live_users_count"> </span>
<script type="text/javascript">
<!--
Event.observe(window, 'load', function() {
if($('live_users_count')) {
new Ajax.Updater('live_users_count','/readvlive.php');
}
}
-->
</script>
大まかではありません。 findコマンドを実行するディレクトリの量に関心がある場合は、APCなどを使用してキャッシュすることができます。 この例でAPC 3.1.4が必要です。
<?php
if(apc_exists('livenum')){
$livenum = apc_fetch('livenum');echo $livenum;
} else {
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
apc_add('livenum',$livenum,30);
}
?>
APC 3.0.13および最大:
<?php
if($livenum = apc_fetch('livenum')){
echo $livenum;
} else {
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
apc_add('livenum',$livenum,30);
}
?>
これらは、ライブユーザーの最後の10分を示す30秒間APCキャッシュを使用します見つける実行されますコマンドを使用して1分間に2回計算します。悪くない。 :P
クリーンアップのcrontabで行うことができます。..
スクリプト(/ルート/ deloverhead。)SH:
#!/bin/sh
find "/path/to/liveusers/ -type f -amin +60 -exec rm {} \;
crontabエントリ(毎時):
0 * * * * /root/deloverhead.sh >/dev/null 2>&1
楽しみを持って、私は物事が奇妙説明するかもしれない申し訳ありません。 :P
データベースメソッドは、任意のWebアプリケーションのための最も遅く、最大のスロットルです。私の目標はデータベースクエリーの数を最小限に減らすことです。私はcronjob、または少なくとも実行中のプロセスのアイデアが好きです。 –