Главная страница О Web-студии Разработка сайтов Интернет-реклама CD-презентации 3D-графика Программное обеспечение
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создание сайтов. Авторы: Кузнецов М.В., Симдянов И.В. Головоломки на PHP для хакера (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры . Авторы: Кузнецов М.В., Симдянов И.В. PHP. Народные советы. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование: ступени карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Security & Cracking Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
Консультации от известных специалистов и авторов многих книг

Информационный портал
«SoftTime-INFO»


Примеры скриптов на PHP

Вернуться в примеры скриптов

Скрипт "Список посетителей OnLine"


Часто на сайтах можно видите фразу, сейчас данный сайт просматривает столько-то человек, или даже список зарегистрированных посетителей, находящихся в данным момент на сайте. Обычно такой сервис называют "Список посетителей OnLine". Учитывая, что у посетителя может динамически меняться IP-адрес, или наоборот несколько посетителей могут выходить в Интернет из под одного IP-адреса, для подсчёта уникальных посетителей на сайте прибегают к сессиям. Создадим таблицу session в которой будем хранить уникальные идентификаторы сессии (SID), назначенные посетителям.

Таблица session

CREATE TABLE session ( 
  id_session tinytext NOT NULL, 
  putdate datetime NOT NULL default '0000-00-00 00:00:00', 
  user tinytext NOT NULL 
) TYPE=MyISAM;

Таблица имеет три поля - id_session, поле, куда помещается SID сессии, поле putdate, для того, хранения времени обращения посетителя к страницам сайта и поле user, которое нами использоваться не будет, но в котором можно хранить имя пользователя, если у вас имеется система авторизации и вы хотите различать гостей и авторизованных пользователей. Предполагается, что имя пользователя помещается в элемент суперглобального массива $_SESSION['user'] - если вас интересует авторизация на PHP, с нейм можно ознакомиться по ссылке

В начало каждой страницы сайта, которая будет участвовать в регистрации посетителей следует при помощи конструкции require_once() поместить следующий код.

Скрипт регистрации посетителей в таблице session

<?php 
  // Начинаем сессию 
  session_start(); 
  // Получаем уникальный id сессии 
  $id_session session_id(); 
  // Устанавливаем соединение с базой данных 
  include "config.php"; 
  // Проверяем, присутствует ли такой id в базе данных 
  $query "SELECT * FROM session 
            WHERE id_session = '$id_session'"; 
  $ses mysql_query($query); 
  if(!$ses) exit("<p>Ошибка в запросе к таблице сессий</p>"); 
  // Если сессия с таким номером уже существует, 
  // значит пользователь online - обновляем время его 
  // последнего посещения 
  if(mysql_num_rows($ses)>0) 
  { 
    $query "UPDATE session SET putdate = NOW(), 
                                 user = '$_SESSION[user]' 
              WHERE id_session = '$id_session'"; 
    mysql_query($query); 
  } 
  // Иначе, если такого номера нет - посетитель только что 
  // вошёл - помещаем в таблицу нового посетителя 
  else 
  { 
    $query "INSERT INTO session 
              VALUES('$id_session', NOW(), '$_SESSION[user]')"; 
    if(!mysql_query($query)) 
    { 
      echo $query."<br>"; 
      echo "<p>Ошибка при добавлении пользователя</p>"; 
      exit(); 
    } 
  } 
  // Будем считать, что пользователи, которые отсутствовали 
  // в течении 20 минут - покинули ресурс - удаляем их 
  // id_session из базы данных 
  $query "DELETE FROM session 
            WHERE putdate < NOW() -  INTERVAL '20' MINUTE"; 
  mysql_query($query); 
?>

Протокол HTTP не является сессионным протоколом, поэтому мы можем фиксировать только обращения посетителей к страницам сайта - сколько после этого посетитель будет читать страницу - одному богу известно - получить эту информацию мы не сможем. Поэтому мы будем считать, что если посетиель не обращается к страницам сайта более 20 минут - он ушёл и его можно удалять из таблицы session.

Теперь нам остаётся только вывести содержимое таблицы session или подсчитать число посетителей в ней.

Выводим содержимое таблицы session

<?php 
  // Устанавливаем соединение с базой данных 
  include "config.php"; 
  // Выводим имена всех посетителей, записи о которых имеются 
  // в таблице session 
  $query "SELECT * FROM session"; 
  $ath mysql_query($query); 
  if(!$ath) exit("<p>Ошибка в запросе к таблице сессий</p>"); 
  // Если хоть кто-то есть - выводим таблицу 
  if(mysql_num_rows($ath)>0) 
  { 
    echo "<table>"; 
    while($author mysql_fetch_array($ath)) 
    { 
      // Если посетитель не зарегистрирован 
      // выводим вместо его имени - "аноним" 
      if(empty($author['user'])) echo "<tr><td>аноним</td></tr>"; 
      else echo "<tr><td>".$author['user']."</td></tr>"; 
    } 
    echo "</table>"; 
  } 
?>

Для установки соединения с базой данных, нам потребуется конфигурационный файл config.php, следующего содержания.

Конфигурационный файл config.php

<?php
  ////////////////////////////////////////////////////////////
  // 2003-2011 (C) IT-студия SoftTime (http://www.softtime.ru)
  ////////////////////////////////////////////////////////////
  // сейчас выставлен сервер локальной машины
  $dblocation "localhost";
  // Имя базы данных, на хостинге или локальной машине
  $dbname "dbase";
  // Имя пользователя базы данных
  $dbuser "root";
  // и его пароль
  $dbpasswd "";

  // Устанавливаем соединение с базой данных
  $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
  if (!$dbcnx) {
   exit( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
  }
  // Выбираем базу данных
  if (! @mysql_select_db($dbname,$dbcnx) ) {
    exit( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" );
  }

  // Устанавливаем кодировку соединения
  @mysql_query("SET NAMES 'cp1251'");
?>

 
  Rambler's Top100 Яндекс.Метрика Яндекс цитирования