Ради решения этого для кого-либо здесь, здесь. Соберите код по порядку и используйте указания по пути. Требуется расширение PHP GD.
Создайте каталог в вашем webroot, убедитесь, что веб-демон может писать в него:
mkdir liveusers
Создание сценария PHP (например, vlive.php ) для кода touch (кстати, touch - стандартная команда * nix, используйте систему (), passthru () или exec () независимо от того, что вы хотите использовать). Пусть коснется файла в этом каталоге с уникальным именем файла, например, IP + SessionID concat'd вместе:
<?php
exec("touch ". $_SERVER['DOCUMENT_ROOT']."/liveusers/". md5($_SERVER['REMOTE_ADDR'].session_id())); /* SECURITY RISK */
Теперь, в том же файле нам нужно вывести JPEG и завершить его соответствующим заголовком (). Я помещаю пиксель 1x1 с именем pixel.jpg в корень веб-корня / images / directory , не стесняйтесь делать что-то еще:
$NewImage = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']. "/images/pixel.jpg");
header("Content-type: image/jpeg");
imagejpeg($NewImage);
?>
Сохраните файл PHP, затем поместите стандартный HTML-тег в документ, чтобы он был полезен:
<img src="/vlive.php" alt="Imagination!" />
Использование чистого PHP с этими кеширующими страницами просто сделает это так, что живые пользовательские файлы едва получат touch 'd. Делая это, вы все равно можете считать «живых» пользователей и использовать систему полностраничного кэша на вашем сайте.
Хорошо, так что теперь каждая страница, которую загружает посетитель, касается своего уникального файла, поэтому, если они только что прибыли, сенсорная команда создаст файл для этого пользователя, если он также посещает другие страницы, он отредактирует дату доступа с помощью та же самая команда touch .
Вот где это полезно:
В другом скрипте 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 минут назад. Это наши живые пользователи за последние десять минут ...
Теперь у нас есть выбор, опять же, если вы используете полностраничный кеш, вы можете заморозить кэшированное действительное число в этих документах, что делает его довольно раздражающим и бесполезным. Для этого я предлагаю PrototypeJS (Google it), вы используете их причудливые инструменты AJAX, поместите их между <head></head>
<script src="/js/prototype.js" type="text/javascript"></script>
затем поместите его над тегом </body>
.
<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>
Должно быть хорошо .. не слишком грубо. Если вы беспокоитесь о том, сколько раз ваш каталог будет выполнять эту команду поиска, вы можете использовать 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);
}
?>
Они будут использовать кеширование APC в течение 30 секунд, показывая последние 10 минут активных пользователей, и будут запускать команду find, чтобы вычислять ее дважды в минуту. Неплохо. : P
Очистить можно с помощью crontab.
Сценарий ( / root / deloverhead.sh ):
#!/bin/sh
find "/path/to/liveusers/ -type f -amin +60 -exec rm {} \;
Запись в Crontab (каждый час):
0 * * * * /root/deloverhead.sh >/dev/null 2>&1
Веселитесь, извините, я могу объяснить странные вещи. : P