Krististudio.ru

Онлайн образование
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Онлайн на сайте php

Самый быстрый способ определить количество пользователей на сайте онлайн

Наверное, путешествуя в Сети, вы не раз натыкались на подобного типа надпись «Сейчас на сайте 99 человек», что означает, что кроме вас в данный момент этот сайт просматривает 98 человек. Скорее всего, вы хотели написать такую вещь, но не знали как. Следующая статья покажет как самому написать скрипт, считающий количество посетителей на сайте в данный момент, то есть онлайн.

В Интернете много готовых скриптов, позволяющих считать пользователей онлайн, но раз вы читаете эту статью, значит, вы как и я не особо любите ковыряться в чужом коде. Ну, в таком, случае, давайте, напишем такой скрипт сами. Но прежде поговорим о его преимуществах и недостатках.

Преимущества

Ему не нужна реляционная база данных, что согласитесь, в нашем Рунете (я имею в виду относительно бесплатную его часть), является несомненным преимуществом.
Опять же несомненным преимуществом является скорость. Я не поленился написать подобный скрипт с использованием БД и при помощи функции microtime() (в самом низу – результат ее работы – «Время генерации: …») измерил время выполнения:

  • Используя сессии – 0,7 мс
  • Используя БД – 14,2 мс

То есть преимущество в скорости – более чем в 19 раз! Вы можете сказать : «Тоже мне большое дело. Всего 13 мс разница», да они будут правы – а если посещаемость большая? Растет нагрузка на сервер и тогда действительно такое преимущество становится очевидным.
Еще одно преимущество – то, что информация в сессиях хранится пока не закрыт браузер или 1440 секунд (стоит по умолчанию в php.ini), в БД информацию о юзерах вам пришлось бы удалять вручную.
И последнее – простота, чтобы объявить сессию достаточно вызвать функцию session_start(), а чтобы настроить правильных образом БД нужно написать целых 15 строк кода.

Недостатки

Нет детальной статистики – в сможете только узнать количество пользователей в данный момент, для ведения статистики (хиты, хосты…) придется все-таки работать с БД.
Нужен PHP4 – как это ни парадоксально – еще не все хостеры поставили себе PHP4.

ЗАМЕЧАНИЕ: Если у вас нет специальной директории для хранения сессий, просто сразу первой строчкой добавьте:

Теперь пройдемся по отдельным частям кода:

Следующая строка кода — это объявление некоторой константы, в течении которой пользователи будет считаться активными, то есть присутствующими в данный момент на сайте. В нашем примере — 180 секунд, то есть, если пользовательь не перешел на новую страницу или не перезагрузил эту в течении 3 минут, то он считается ушедшим с сайта и мы его уже не учитываем:

Теперь мы объявляем функцию getonlineuser() и сразу открываем «сессионную» директорию:

Далее идет часть кода, которая собственно и отвечает за подсчет пользователей, функция возвращает кол-во пользователей онлайн:

И пожалуй, разумно будет вывод количества юзеров в конце:

Пользователи онлайн

Принцип реализации

На многих сайтах есть необходимость определять, какие пользователи в данный момент находятся на связи. Например, это используется в социальных сетях. Эта функция реализуется так: каждый пользователь регулярно отправляет на сервер информацию о том, что он в сети. Время этого сообщения записывается в БД. Если пользователь отправлял это сообщение совсем недавно, то считается что он в сети. Таким образом, реализация данной функции состоит из двух частей:

  1. Каждый пользователь обновляет время сообщения о том, что пользователь онлайн
  2. Для нужных пользователей проверяется, когда они обновляли время сообщения. Тот, кто обновлял недавно — в сети. Кто не обновлял некоторое время — не в сети.

Для реализации этой функции в таблице с пользователями должно быть поле, куда записывается время обновления информации.

Обновление информации

Это действие можно выполнить двумя способами. Простой вариант заключается в том, что информация обновляется при переходе по страницам. Но этот способ имеет недостаток. Пользователь может долго находиться на одной странице и не переходить по другим страницам. Тогда информация о том, что он на связи, не обновляестя и будет указано, что он вышел с сайта. А если увеличить время, в течении которого пользователь считается онлайн, то получится противоположная ситуация. Пользователь уже вышел с сайта, но ещё долго считается, что он в сети. Оптимально подобрать время достаточно сложно.

Более сложный способ состоит в использовании AJAX. На каждой странице сайта должен быть скрипт, который регулярно обновляет информацию в БД. При этом Вы точно знаете, через какие промежутки времени происходит обновление информации. Мы рассмотрим оба способа.

В базе данных дожна быть таблица users с информацией о пользователях. Добавим в неё поле online . В него будет записываться время обновления информации. Будем записывать его в фомате Unix, то есть в секундах. Поэтому поле имеет тип INT.

Страницы сайта должны быть такие:

В строке 3 создаётся переменная $user_id , в которую записано id пользователя. На практике id записывается в сессию при авторизации, а в этом скрипте он должен быть получен из сессии.

В остальном скрипт понятен. В переменную $current записывается текущее время и отправляется в БД, в поле online . Так должны выглядеть все страницы сайта. Когда пользователь переходит на любую страницу, время в поле online обновляется.

Для второго способа Вы должны зать технологию AJAX. Вместо предложенного выше кода на каждой странице сайта должет быть скрипт, регулярно отправляющий запросы на сервер. Он выглядит так:

Если Вы изучали AJAX, то этот код должен быть Вам понятен. К запросу добавлено текущее время. Но оно добавлено не для использования на сервере, а для предотвращения кеширования запроса. Первый вызов функции производится в строке 17. Затем, в строке 18 она запускается в функции setInterval() . Так сделано для того, чтобы первый запрос отправлялся сразу после загрузки страницы. Ведь setInterval() первый раз запускает функцию только через указанный интервал. Приведённый скрипт отправляет запросы на сервер каждые 40 секунд.

На сервере запускается скрипт infonline.php. Он точно такой же, как на странице в первом примере. Только в нём не должно быть HTML тегов.

Читать еще:  Найти видео по фрагменту онлайн

Вывод пользователей онлайн

Данные о том, кто находится онлайн, используется по-разному. На каких-то сайтах просто выводится списох всех пользователей онлайн. На других выводится разная информация о конкретных пользователях и указывается, находятся ли они на сайте. При любом варианте используется один принцип — нужно получить текущее время и сравнить со временем в базе данных. Если разница небольшая, значит пользователь онлайн. В нашем примере данные обновляются каждые 40 секунд. Значит при разнице в 50 секунд можно считать, что пользователь вышел с сайта. Если данные обновляются без AJAX, то интервал подобрать сложнее. Вы должны сами определить, сколько времени в среднем пользователь находится на одной странице.

Коприрование материалов сайта возможно только с согласия администрации

«Кто онлайн?» виджет с помощью PHP, MySQL и jQuery

В этом уроке мы сделаем полезный виджет, который будет отслеживать сколько посетителей в данный момент находится на сайте.

Более он также будет способен определять страну, возраст, и заработную плату ( шутка ) посетителя. Страна будет определяться с помощью бесплатного сервиса http://www.hostip.info/. Если быть более точным, то с помощью АПИ сервиса.

Шаг 1 — XHTML

Как всегда мы начинаем с фундамента. Кода совсем немного. Основная работа будет вестись над серверной частью. Наш виджет будет состоять из красивой кнопки с отображением количества человек, при нажатии на которую всплывает более подробная таблица с флагами стран.

Как Вы можете заметить из разметки выше, главный контейнер — » onlineWidget » содержит выезжающую панель ( div с классом » panel «), общее количество посетителей онлайн ( div » count » ), ярлык » online » и зеленую стрелку справа.

div выезжающей панели наполняется динамически с помощью AJAX. Содержание этой панели по умолчанию — вращающийся файл gif, который вскоре заменяется гео информацией после обработки AJAX запроса. К этому мы еще вернемся.

Шаг 2 — База данных

Вся информация виджета хранится в таблице tz_who_is_online. Она состоит из шести полей (или колонок). Первое — ID ( первичный ключ + автодобавление ), второе — IP ( сохраняет IP адрес, который преобразован в целое число с помощью функции ip2long).

Далее следуют три поля, которые берутся из Hostip API — Country, CountryCode и City. Виджет на данный момент не использует поле CITY ( город ), но на случай если кто-то захочет доработать его — оно пригодится. Последнее поле — DT — временной штамп, который обновляется при каждой загрузки страницы и позволяет определить кто онлайн (пользователи, которые не обновляют страницу на протяжении 10 минут скорее всего уже покинули сайт).

Шаг 3 — CSS

Виджет практически не использует картинок. Давайте взглянем на стили:

В первом шаге выше Вы можете увидеть как мы придаем стили нашему виджету и выезжающей панели единовременно. Это для того, чтобы мы были уверены, что у них единый стиль, который в последствии легко можно будет поменять по желанию.

Во второй части стилей мы описываем то, как должна выглядеть информации после получения ее от AJAX запросов.

Шаг 4 — PHP

Именно здесь происходит вся магия. PHP должен сохранять базу данных посетителей онлайн постоянно обновленной, а также извлекать гео информацию от Hostip API. В дальнейшем это кешируется для дальнейшего использования в виде «куки» на компьютере пользователя.

Этот PHP скрипт вызывается с помощью jQuery для вставки текущего количества человек онлайн в соответствующее место. «За кулисами» этот скрипт записывает IP адрес пользователя в базу данных и уточняет всю необходимую гео информацию.

Это лучшая стратегия организации серверной части, так как мы запросы к АПИ распределяются каждому пользователя при их первом посещении.

Вы можете сделать запрос на Hostip API обращаясь по УРЛ типа http://api.hostip.info/?ip=128.128.128.128. И получите валидный XML ответ, который будет содержать разного рода инфомрацию, включая страну, название города связанного с этим IP, аббревиатуру страны, а также абсолютные координаты. Мы извлекаем эту информацию с помощью функции PHP file_get_contents() и выбираем необходимую нам информацию.

Geodata.php прочитывается с помощью jQuery для публикации информации в выезжающую панель. Файл делает запрос в БД с запросом GROUP BY, который группирует пользователей по стране и выстраивает их по количеству посетителей (чем больше с одной страны — тем выше в списке).

Для иконок флагов используется набор от famfamfam. Большой плюс Hostip API в том, что также он выдает аббревиатуры страны в формате 2-х букв, что также поддерживается и в иконках. Таким образом скрипту очень просто найти необходимый флаг при его поиске в папке.

Шаг 5 — jQuery

JavaScript управляет AJAX запросами и выездом панели. Давайте взглянем на код:

setTimeout используется для задержки загрузки выезжающей панели после наведения мышки на кнопку. Таким образом, случайные движения и наведения на кнопку ни к чему не приведут и не будут лишний раз запускать весь процес.

Вот и все готово! Думаю, подобная фишка пригодится многим!

Настройка на своем сервере

В исходниках находится SQL код, который необходимо выполнить после создания БД. Он создаст таблицу, которая используется виджетом. После этого Вам необходимо загрузить все файлы на Ваш сервер и подключить widget.js в шапку документа (вместе с jQuery фре ймворком ). После этого не забудьте внести Ваши данные для соединения с БД в файле connect.php. И в самом конце добавьте разметку из файла demo.html в необходимом месте Вашего документа.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.tutorialzine.com
Перевел: Максим Шкурупий
Урок создан: 9 Марта 2010
Просмотров: 62055
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Читать еще:  Укулеле онлайн играть

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Реализация Кто онлайн

Наверняка, Вы часто видели на разных сайтах информацию о количестве online-пользователей, то есть пользователей, которые непосредственно находятся сейчас на сайте. Например, «Кто онлайн» часто добавляют на форумы, социальные сети, различные сервисы, причём даже пишут конкретные логины пользователей, находящихся на сайте. Я решил, что в этой статье разберу, как реализовать «Кто онлайн» на сайте.

Первым делом необходимо понять принцип работы «Кто онлайн». А принцип следующий: каждый пользователь, который не активен более заданного времени, выбывает из списка online. Каждый новый пользователь добавляется в список online. И этот список хранится в базе данных. Те, кто уже неплохо разбирается в PHP и MySQL, без проблем реализуют всё это. Однако, на всякий случай, распишу подробную инструкцию:

  1. Создать таблицу в базе данных со следующими полями:
    • id — уникальный идентификатор каждой записи.
    • user_id — уникальный идентификатор, соответствующий определённому пользователю. Другими словами, если у Вас есть регистрация, то в таблице с пользователями должен быть указан их id. Вот именно в это поле и необходимо помещать этот id.
    • last_time — количество секунд прошедших с полуночи 01.01.1970 до последней активности пользователя. Это количество секунд легко получается с помощью функции time().
  2. На каждой странице сайта, на каждом скрипте, необходимо реализовать следующий алгоритм:
    1. Получить информацию об активности пользователя, вызвавшего этот скрипт. Если этот пользователь находится в таблице, то надо просто обновить поле last_time у него. Если его там нет, то необходимо добавить этого пользователя в таблицу.
    2. Удалить всех online-пользователей из таблицы, у которых время неактивности превышает заданное, простым SQL-запросом.

Всё, это весь алгоритм. Он, на самом деле, очень простой и самый частоиспользуемый. Что касается времени, через которое пользователь считается за offline, то здесь советую выбрать 30 минут. А сам принцип, надеюсь, стал понятен: каждый пользователь, который переходит на любую страницу сайта, вызывает добавление себя в список online (или обновление last_time, если он там уже был), а также удаление уже неактивных пользователей.

Также вместо user_id можно использовать IP-адрес. Тогда можно реализовать, не сколько зарегистрированных пользователей, а сколько вообще людей находится на сайте.

Я очень рекомендую реализовать этот алгоритм, даже если он Вам кажется совсем простым. А возникшие вопросы Вы можете задать в комментариях.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 24 ):

    Насчет обновления поля last_time понятно — это делает сам пользователь, активничая на сайте. А вот кто вызовет команду удаления неактивных пользователей? Как запустить скрипт автоматом?

    Каждый пользователь не только обновляет себя, как активного, но он же и удаляет неактивных. Можно ещё написать отдельный скрипт и запустить его в cron на запуск через заданные интервалы. Результат будет тот же.

    А вот у меня столбец online находится в одной и том же столбике, что и вся инфа о юзере, в общем вот id login password avatar email activation date online Эта структура таблицы users, вот например в начале каждого php-шного файла у меня подключается такой код идентифицирующий пользователя который ввел свои данные и вошел под своими данными. if (isset($_COOKIE[‘auto’]) and isset($_COOKIE[‘login’]) and isset($_COOKIE[‘password’])) < if ($_COOKIE['auto'] == 'yes') < $_SESSION['password']=strrev(md5($_COOKIE['password']))."000000"; $_SESSION['login']=$_COOKIE['login']; $_SESSION['id']=$_COOKIE['id']; >> if (!empty($_SESSION[‘login’]) and !empty($_SESSION[‘password’])) < $login = $_SESSION['login']; $password = $_SESSION['password']; $result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db); $myrow = mysql_fetch_array($result); >А вот как мне вытащить данные например именно того пользователя на странице которого я сижу, то есть мне нужно написать запрос на отображение онлайн ли он или нет, когда я сижу под своими данными чтоб мне это видеть. Не могу понять как это сделать и все, думал сделать через while и do, но эта мысль отпала , поняв что этот способ не подойдет. Ох надеюсь вы прочтете мой бред и спасете меня в очередной раз=)

    Допустим, страница, на которой выводится информация называется user.php. Чтобы выводить информацию на страницу именно того пользователя, который требуется, нужно передать get-параметр. То есть в реальности ссылка на страницу будет user.php?id=17. При переходе по такому адресу выводится тот пользователь, чей id=17.

    дело все в том что у меня стоит условие если вы находитесь на странице с id=1 то есть своим, то вам выводится одна информация, а если эта страница не ваша то вам выводится другая информация, все это происходит по сессионным логам.

    Где и как указать (прописать) это время — 30 минут

    Читать еще:  Создать онлайн портфолио бесплатно

    В конфигурационном файле, например.

    Понял. 1. А как проверить время, после которого скрипт будет удалять пользователя? И как узнать кого удалять? Это надо уметь работать с функцией time()? А есть этот материал? 2. Как удалить из базы (таблицы) записи, которые не соответствуют нужной мне переменной?

    3. А можно пользователям запустить бесконечную сессию? Или хотя бы на очень долгое время? Как это сделать?

    Не стоит этого делать, все файлы хранятся на сервере и рано или поздно место закончится.

    Тут надо много, чего уметь. В статье надо алгоритм, а не код. Готовые скрипты на других сайтах, а здесь обучение. Вот это почитайте http://myrusakov.ru/php-how-study.html

    А почему Интернет-Эксплоер не пропускает изображения jpg jpeg JPG JPEG такой проверкой: $type = $_FILES[‘somename’][‘type’]; if (($type != «image/gif») && ($type != «image/jpeg») && ($type != «image/png») && ($type != «image/JPG») && ($type != «image/jpg»))

    Посмотрите значение $type через echo.

    А что я там должен увидеть?

    Посмотреть значение $type.

    Показало вот это: image/pjpeg Что это значит? Это какой-то новый формат изображений? Оно безопасное? Его стоит добавлять в список допустимых? Или это подделка?

    Оно безопасное, просто mime-type отправляет браузер, и вот IE, как всегда, отличился.

    А вы не можете по этому урок записать?

    В любом случае,если Вы не будете знать php,то не поймёте о чём речь в уроке =)

    Та знаю я php но много чего немонимаю, но а в видео уроке все легче запоминается.

    ну,во первых.Раз вы знаете php,то отдельно от остальных этот скрипт не напишешь,так как он неуместен будет Во-вторых,если вы знаете php,то,как по мне,то технология тут расписана довольно понятно. Такие вот дела. Если Михаил захочет,то сделает урок на данную тему,но не думаю,что это актуально

    Это кому как, кому-то не сложно это сделать, ну а некоторым посложнее, вот и здесь даже сколько переспрашивали, так не лучше записать урок, а уже в процесе каждый сделает под себя как удобно!

    Для этого нужно создать отдельную таблицу online или добавить поля в таблицу users?

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Скрипт, отображающий количество посетителей
    находящихся на сайте в данный момент

    Любому вебмастеру наверняка бывает интересно, сколько посетителей находится на его сайте в определенный момент времени, но не всегда хочется ставить сторонние счетчики.

    Предлагаем Вам установить на свой сайт простой PHP скрипт, позволяющий посчитать количество посетителей онлайн. Особенностью данного скрипта является то, что он не использует базу MySQL.

    Для того чтобы посчитать количество уникальных посетителей находящихся на Вашем сайте в данный момент, Вам необходимо вставить в самое начало содержимого Вашей странички следующий PHP код:

    Принцип работы данного скрипта довольно прост.

    У каждого посетителя есть свой идентификатор сессии session_id(). При заходе на сайт мы выделяем этот идентификатор и ищем его в нашей базе (в нашем случае это файл session.txt в корне сайта). Если такого идентификатора сессии нет, то помещаем его в наш текстовый файл, дополнительно записав текущее время через разделитель «|».

    После обновления страницы пользователем мы вновь выделяем идентификатор сессии, проверяем его наличие в файле session.txt. Если такого идентификатор сессии нет, то добавляем, если есть — обновляем время (заменяем на текущее время).

    Далее просматриваем все записи в файле session.txt и удаляем те, у которых разница с текущим временем составляет больше 10 минут (или 600 секунд). Данный интервал времени можно изменить на свое усмотрение, изменив значение в строке:

    Для вывода в нужном месте информации о количестве посетителей, находящихся в данный момент на Вашем сайте, используйте следующий код:

    Для нормальной работы данного скрипта необходимо чтобы Ваш хостинг поддерживал использование сессий!

    Данный скрипт долгое время функционировал и на данном сайте, но в дальнейшем был переведен на работу с MySQL. Пример работы аналогичного скрипта Вы можете наблюдать в верхней части правой колонки нашего сайта над меню.

    Здравствуйте! Как сменить цвет текста «Сейчас на сайте:»

    P.S. Вот ещё вопросик как поставить надпись «Сейчас на сайте:» в правый верхний угол сайта, а то у меня пишет прямо по центру некрасиво как то.
    Как сделать как у Вас, например чтоб на одном уровне были слева часы, а справа кто онлайн?

    E_NOTICE позволяет выводить все ошибки, за исключением замечаний.

    Добавьте в свою панель управления код для удаления старых записей из файла базы:
    $LastTime = time() — 600;
    $base = «session.txt»;
    $file = file($base);
    $k = 0;
    for ($i = 0; $i $LastTime) < $ResFile[$k] = $file[$i]; $k++; >
    >
    $fp = fopen($base, «w»);
    for ($i = 0; $i
    fclose($fp);

    Таким образом, каждый раз при обновлении странички панели управления сайта будут удаляться все старые записи в базе, и Вы будете видеть актуальное количество посетителей.

    Привет из 2020. Вот начал учиться создавать сайты, хотел какой-то простенький код на php, чтобы видеть кол-во посетителей.
    Я реализовал немного иначе, чтобы каждый раз не вставлять этот код, просто создал функцию и записал ее в фаил со всеми функциями. И как подобает функции в конце вывел return. То есть перед последней фигурной скобкой (перед концом функции): return sizeof(file($base));
    И чтобы не мучатся добавлять функцию на каждой странице, вставил ее в файл с коннектом с БД. А уже в месте, где нужно указать количество посетителей вывел: echo name_function();

    P.S. также, необходимо указать не просто название файла «session.txt», а полный путь, чтобы потом не было проблем, если посетитель зайдет с другой страницы. Так что строчку $base = «session.txt»; заменить на: $base = $_SERVER[«DOCUMENT_ROOT»] . «session.txt»;

    Перед публикацией все комментарии проходят обязательную модерацию!

    Если Вы хотите задать какой-либо вопрос, то лучше сделайте это на нашем форуме.
    Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.

    Ссылка на основную публикацию
    Adblock
    detector