У меня есть следующий код для подсчета посетителей на моем сайте PHP. Он отлично работает на моей локальной машине разработки с использованием WampServer, но когда я загрузил свои файлы на мою учетную запись хостинга для тестирования, я понял, что он работает неправильно.
Я получаю действительно большое количество чисел, а также заметил, что сеанс никогда не удаляется, поэтому они просто продолжают накапливаться.
Это простой счетчик сеансов. Есть ли лучший способ сделать это? Может кто-нибудь, пожалуйста, покажите мне или назовите меня какой-нибудь статьей? Спасибо!
<?php //------------------------------------------------------------ // VISITORS ONLINE COUNTER //------------------------------------------------------------ if (!isset($_SESSION)) { session_start(); } function visitorsOnline() { $session_path = session_save_path(); $visitors = 0; $handle = opendir($session_path); while(( $file = readdir($handle) ) != false) { if($file != "." && $file != "..") { if(preg_match('/^sess/', $file)) { $visitors++; } } } return $visitors; } ?>
Если вы хотите использовать собственную внутреннюю систему подсчета, я бы предложил, сохраняя такую информацию, связанную с веб-сайтом в базе данных. И обновляйте запись каждый раз, когда пользователь просматривает веб-сайт.
Если это общий хостинг, вы считаете файлы сеансов всех пользователей , а не только ваши собственные. Вот почему число огромно и в значительной степени не связано с тем, сколько людей на вашем сайте.
Лучший (бесплатный) способ подсчета посетителей находится здесь: http://www.google.com/analytics .
Если вам нужны больше данных в реальном времени (например, в настоящее время активные пользователи), попробуйте: http://www.woopra.com/
Если вы настроились на то, что на вашем сайте активен ваш собственный код, я бы сделал это с полем «последнее действие» в вашей базе данных в таблице пользователей. Вы сможете выполнить эквивалентный запрос PHP для SELECT COUNT(id) FROM Users WHERE #{Time.now} > #{15.minutes.ago}
Если вы хотите также отслеживать анонимных пользователей, а не использовать таблицу «Пользователи», создайте таблицу с IP-адресом посетителя в качестве поля идентификации и используйте тот же метод, о котором говорилось выше.
Если проблема на рабочем сервере заключается в том, что сеансы просто не удаляются, у вас есть два варианта:
Хм, я не уверен, что чтение файлов сеанса в сеансе dir – лучший метод.
Почему бы не написать запись в таблице db для каждой загрузки страницы. Затем прочитайте, что подсчитывает количество уникальных пользователей за последние x минут?
Это звучит db, но если ваш сайт не занят, я не вижу проблемы.