Для того, чтобы скрипт функционировал на сервере должен стоять php5 и MySQL.
Для начала необходимо создать таблицу в вашей базе данных, это можно сделать следующим образом, выполнив запрос:
CREATE TABLE win_online( id int AUTO_INCREMENT, ip VARCHAR (30), browser VARCHAR (60), time DATETIME, PRIMARY KEY(id));
После этого можно начать использовать данный код: <?php class online { //объявляем константы классы с данными к базе данный MySQL //сервер базы данных const db_host = 'localhost'; //пользователь базы данных const db_user = 'windoctor'; //пароль пользователя const db_pass = '123456789'; //имя базы данных const db_name = 'online'; //время, по истечении, которого считаем посетителя ушедшего в офф const time = 600;
//объявляем конструктор function __construct($ip,$browser) { $this->connect(); $this->count_online($ip,$browser); }
//соединение с базой данных MySQL private function connect() { if(!$this->r = @mysql_connect(self::db_host, self::db_user, self::db_pass)) throw new Exception ('Невозможно подключиться к серверу MySQL!'); if (!@mysql_select_db(self::db_name, $this->r)) throw new Exception ('Ошибка при выборе базы данных!'); }
//записываем нового посетителя или обновляем время его присутсвия на сайте public function count_online ($ip,$browser) { $ip = mysql_real_escape_string($ip); $browser = strip_tags(trim(substr(mysql_real_escape_string ($browser),0,60)));$this->clean_online();
$q=mysql_query ("SELECT COUNT(id) as total FROM win_online WHERE ip='$ip'",$this->r); if(!@$all = mysql_fetch_array($q,$this->r)) throw new Exception ('Возникла ошибка при выборке списка он-лайн, приносим вам свои извенения'); if ($all[0] < 1 ) { mysql_query ("INSERT INTO win_online VALUES (NULL,'$ip','$browser',NOW())",$this->r); } else { mysql_query ("UPDATE win_online SET time=NOW() WHERE ip='$ip'",$this->r); } } //возвращаем массив пользователей он-лайн public function returnOnlineList() { $q = mysql_query ("SELECT * FROM win_online ORDER by id DESC",$this->r); if (!$q) throw new Exception ('Ошибка при выборке списка он-лайн!'); while ($rows = mysql_fetch_array($q)) { $array[] = $rows; } return $array; } //Возвращаем количество посетителей в он-лайне public function returnAllOnline() { $q=mysql_query ("SELECT COUNT(id) as total FROM win_online",$this->r); if (!$all = mysql_fetch_array($q)) throw new Exception ('Ошибка при подсчёте он-лайн пользователей!'); return (int) $all['total']; } //очищение таблицы посетителей от тех кто ушёл в офф-лайн private function clean_online () { mysql_query ("DELETE FROM win_online WHERE time<NOW()-INTERVAL ".self::time." SECOND",$this->r); } } ?>
Как использовать данный класс спросите вы? Элементарно, отвечу я.
Создаём файл с таким содержимым:
<?php require_once ('путь до класса'); //инициализируем класс и ловим исключения try { $online = new online($_SERVER['REMOTE_ADDR'],$_SERVER['HTTP_USER_AGENT']); } catch (Exception $e) { //просто выводим сообщение, но также для логгирования можно дописать соотвествующие функции, ибо использование исключений предоствляет обширный функционал echo $e->getMessage();} ?>
Данный скрипт, нужно записать в файл и подключать во все страницы вашего сайта, но до этого необходимо записать в константы класса ваши доступы к БД.
Чтобы вывести список он-лайн вам необходимо создать страницу со следующим кодом:
<?php require_once ('путь до класса'); try { $online = new online($_SERVER['REMOTE_ADDR'],$_SERVER['HTTP_USER_AGENT']); $arr = $online->returnOnlineList(); $all = $online->returnAllOnline(); echo 'Всего в он-лайн: '.$all; echo '<br />'; for ($i=0;$i < count($arr);$i++) { echo 'Браузер: '.$arr[$i]['browser'].'<br /> ip:'.$arr[$i]['ip'].'<br /> Дата: '.$arr[$i]['time'].'<br /><br />'; } } catch (Exception $e) { echo $e->getMessage(); } ?> Вот и всё, теперь есть у вас на сайте система, которая считает количество пользователей он-лайн. Класс хорошо прокомментирован, так что думаю с его разбором проблем не будет.
Автор статьи: windoctor e-mail: admin@wapcoder.com, admin@windoctor.org Сайт автора: http://sultanov.net, http://wapcoder.org, http://windoctor.org
Все вопросы вы можете задать на форуме wapcoder.com или по e-mail При перечатке материалов необходимо установить видимую ссылку на http://wapcoder.com
|