Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28

Запись статистики в файл с интервалом по времени

08.06.2017, 13:35. Показов 901. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста что нужно добавить в этот код чтобы посетитель с IP адресом который уже присутствует в файле не учитывался повторно (не происходила запись строки в файл) в течении заданного времени. Я знаю что это можно реализовать с помощью Cookie но как именно ?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$file="../../../admin/state.dat";    
$col_zap=99;    
 
 
  
function getRealIpAddr() {
  if (!empty($_SERVER['HTTP_CLIENT_IP']))        // IP
  { $ip=$_SERVER['HTTP_CLIENT_IP']; }
  elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
  { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; }
  else { $ip=$_SERVER['REMOTE_ADDR']; }
  return $ip;
}
 
if (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexBot')) {$bot='YandexBot';} //Bots
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot')) {$bot='Googlebot';}
else { $bot=$_SERVER['HTTP_USER_AGENT']; }
 
$ip = getRealIpAddr();
$date = date("H:i:s d.m.Y");        
$home = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];    
$ref = $_SERVER["HTTP_REFERER"];
$lines = file($file);
while(count($lines) > $col_zap) array_shift($lines);
$lines[] = $date."|".$bot."|".$ip."|".$home."|".$ref."|\r\n";
file_put_contents($file, $lines);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2017, 13:35
Ответы с готовыми решениями:

Запись текста в файл, с интервалом времени
Имеется след скрипт который соединятся с БД и считывает оттуда сколько людей в онлайне, так же скрипт соединяться к серверу и проверяет...

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

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

10
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.06.2017, 13:46
Цитата Сообщение от Clover7 Посмотреть сообщение
Я знаю что это можно реализовать с помощью Cookie
Взять IP и проверить нахождение в файле - причём тут куки-то?

file() и перебираем каждый элемент. С помощью explode() получаем IP и сравниваем, если есть совпадение - die().
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 13:59
1. Реальный ip содержится только в $_SERVER['REMOTE_ADDR'];
2. Куки можно удалить.
3. Сравнивать текущий ip с записанным ранее.

Ну а вообще по существу после определения ip ставим кукис:

setcookie('ip', $ip, time() + 31536000 // кукис на целый год чего уж там);

Потом проверяем:

if ($ip != $_COOKIE['ip']) {
// сюда код, где происходит запись строки в файл
}

Предыдущий пост лучше.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.06.2017, 14:04
Цитата Сообщение от Вилы Выкидные Посмотреть сообщение
1. Реальный ip содержится только в $_SERVER['REMOTE_ADDR'];
Не всегда, зависит от настроек.
1
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 14:10
Цитата Сообщение от Jodah Посмотреть сообщение
Не всегда, зависит от настроек.
ТС там вообще из заголовков пытается брать ip - там же всё, что угодно может быть да ещё и у разных пользунов одинаково повторятся, а по HTTP_CLIENT_IP я вообще документации не нахожу хотя эта функция getRealIPAddr уже сто лет в сети гуляет
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.06.2017, 14:18
Цитата Сообщение от Вилы Выкидные Посмотреть сообщение
там же всё, что угодно может быть
Зависит от настроек. Мой хостер любит настраивать так, что в HTTP_X_FORWARDED_FOR падает реальный IP, а REMOTE_ADDR содержит IP моего сервера.
0
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28
08.06.2017, 14:22  [ТС]
Я запутался совсем. Как сделать что-бы при наличии строки в файле .dat в которой содержится IP адресс и запрашиваемый URL (то есть повторяющиеся переменные $ip и $home ) которые уже присутствовали ранее, не происходила запись новой строки в файл в течении допустим одного часа ?
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 14:27
Цитата Сообщение от Jodah Посмотреть сообщение
а REMOTE_ADDR содержит IP моего сервера
это наверное из-за привязки билинга к ip сервера

Добавлено через 2 минуты
Цитата Сообщение от Clover7 Посмотреть сообщение
допустим одного часа
поставить кукис на час

setcookie('ip', $ip, time() + 3600);

через час кукис устареет и условие перестанет работать

if ($ip != $_COOKIE['ip']) {
// сюда код, где происходит запись строки в файл
}
1
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28
08.06.2017, 15:01  [ТС]
Я правильно понимаю что $IP будет равно cookie по истечению одного часа и только в этот момент при запросе с этого адреса произойдет запись в лог. Это так работает ?

Добавлено через 11 минут
Это работает но не совсем, я поставил интервал в 30 секунд и если в течении этого времени хотя бы раз в браузере обновлять страницу то записи в лог не происходит, то есть нужно что-бы проошло тридцать секунд с момента последнего действия, как сделать что-бы считалось просто пройденное время с момента первого открытия страницы пользователем с одним IP ?Получается что если поставить интервал сутки и пользователь хотя-бы раз в сутки будет заходить на сайт то запись его действий в лог вообще вестись не будет.
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
08.06.2017, 15:29
Цитата Сообщение от Clover7 Посмотреть сообщение
и если в течении этого времени хотя бы раз в браузере обновлять страницу
проверять, установлена ли кука иначе она будет устанавливаться у Вас каждый раз при обновлении страницы и отсчёт времени её жизни будет идти заново

if (!isset($_COOKIE['ip']))
{
// тут устанавливаем кукис
}
1
2 / 2 / 1
Регистрация: 08.06.2017
Сообщений: 28
08.06.2017, 17:53  [ТС]
Я понял свою ошибку в том условии которое я пытался обьяснить выше). Большое вам всем спасибо, наконец-то смог настроить все так как мне нужно.

Добавлено через 1 час 14 минут
А как-то можно добавить в этот код переменную $home, я как не пытался не работает, либо не загружается страница, либо пишит в лог все клики ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2017, 17:53
Помогаю со студенческими работами здесь

Запись статистики игры в файл
Пожалуйста, подскажите, как правильно записывать статистику игры (пользователь vs компьютер) в файл и читать ее из файла. Допустим,...

Запись времени в файл
Задание: 6.2. Напишите и выполните программу date.c, которая: а) при помощи функции open создает файл file1 с разрешением чтения/записи...

Массив с интервалом времени
Приветствую! Есть данные в виде двух массивов. В первом записано время, а втором значение. //01.00f = 1 секунда time = 00.00f; ...

Запись времени в файл тхт
Есть система в которую входят пользователи. Я хочу сделать чтоб при входе он записывал время и кто вошел. Я вот думаю как сделать запись...

Запись системного времени в файл
Добрый вечер! Тут такая проблема возникла... Зписываю системное время в файл, но через fprintf(f, "%ver:\n", version);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru