@Anchor00

PHP Где ошибка в коде?

Код ниже делает следующее: выводит рекламный блок на сайте. В течение заданного интервала, пока пользователь ходит по сайту - окно не вылазиет. Через заданный интервал времени - оно снова появляется. Приведенный код работает. Но: периодически, окно все же НЕ появляется. Происходит это когда обновляешь стр-цу где-то на 9-й секунде, отсчета(~в 40%случаев, не всегда).

(а.Кусок кода проверки есть ли такой пользователь - удален, для упрощения
б.В реале конечно не в 10сек, это просто этап теста)

<?php
$ip_array_str = file_get_contents('guests_ip.txt');
$ip_array = unserialize($ip_array_str);
$ip_array_buf = $ip_array;

$current_time = time();
$dif_time = ($current_time - $ip_array[$_SERVER["REMOTE_ADDR"]]);

$advert_show = 0;
if ($dif_time > 10) {
	$advert_show = 1;
	$ip_array[$_SERVER["REMOTE_ADDR"]] = $current_time;
	$ip_array_str = serialize($ip_array);
	file_put_contents('guests_ip.txt', $ip_array_str);
}

//Отладочная инфа
    echo '$$current_time='.$current_time.'<br/><br/>';
    echo '$ip_array_FILE='.$ip_array_buf[$_SERVER["REMOTE_ADDR"]].'<br/>';
    echo '$ip_array_PHP='.$ip_array[$_SERVER["REMOTE_ADDR"]].'<br/><br/>';
    echo '$current_time - ArrayFile='.$dif_time.'<br/>';
    echo '$current_time - PHP Array='.($current_time - $ip_array[$_SERVER["REMOTE_ADDR"]]).'<br/>';
    echo '$advert_show='.$advert_show.'<br/>';

// Показывает следующее (два рефреша на 10-й и 20-й секунде после начала отсчета) c2n.me/3hmx6kK Как видно оттуда, запись в файл где-то успела произойти. Но вот окно НЕ появилось!
  • Вопрос задан
  • 403 просмотра
Пригласить эксперта
Ответы на вопрос 2
Мне кажется не очень хорошая идея решать такую задачу на PHP, на JS было бы уместнее...
Ответ написан
Комментировать
StaDi
@StaDi
Курьер в it отделе
Окно появляется когда пользователь долго не был активен, а после зашевелился?
Используй запись в куки или бд.

А вот экзотический вариант прописать нужное время жизни сессии, и каждый раз выводить сообщение если сессия ранее не создавалась. Соответственно если пользователь был не активен сессию удалиться.

Так записывать только ip не верно, он может быть один и тот же у многих пользователей
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы