Я хочу, чтобы какое-то действие произошло, когда пользователь посетил X-страницы сайта
Должен ли я хранить счетчик извне (в txt-файле или db)?
Я не могу придумать способ установить счетчик на 0, а затем увеличить его на каждую загрузку страницы. Счетчик всегда будет сброшен на 0, или я пропущу что-то очевидное?
Было бы довольно просто использовать данные $_SESSION
для хранения того, сколько страниц просматривал человек.
$_SESSION['pageviews'] = ($_SESSION['pageviews']) ? $_SESSION['pageviews'] + 1 : 1;
Самый простой способ – использовать хранилище сеансов PHP.
session_start(); @$_SESSION['pagecount']++;
PHP автоматически отправляет пользователя cookie сеанса и прозрачно сохраняет содержимое $ _SESSION в плоском файле, связанном с этим файлом cookie. Вам действительно не нужно откатывать свое решение для этой проблемы.
Вы можете начать сеанс, когда пользователь сначала доберется до вашей страницы, а затем увеличит значение каждый раз, когда пользователь перезагружает / посещает подстраницы. Другой способ сделать это – иметь скрытое поле на каждой странице и извлекать его значение, увеличивать его и публиковать на новой странице.
<input type="hidden" value="2" id="blabla" />
Короткий ответ – да, вам нужно сохранить это извне, потому что php (по умолчанию) имеет политику сохранения нулевой памяти. Это означает, что, как только ваш скрипт php запускается, в памяти ничего не осталось.
Для сайта с низким трафиком вы можете подумать о простом файле txt, где вы читаете, увеличиваете и записываете. Для более высокого сайта трафика может работать очень простая таблица mysql.
У вас уже есть способ определить, кто пользователь (например, имя пользователя и пароль), даже если они покидают сайт и возвращаются на другой день? Или вам просто интересно отслеживать количество страниц, которые видит посетитель, и делать что-то особенное на просматриваемой x-странице.
Если это второй, у вас уже есть переменная сеанса, в которой вы можете сохранить счетчик.
$_SESSION['views'] = $_SESSION['views'] + 1 if($_SESSION['views'] == x) ...
вы должны использовать оператор if, чтобы проверить, уже ли он установлен;
if( isset($count) ) { $count = $count + 1; } else { $count = 1; }
Вы также можете использовать метод get, чтобы поместить счет в URL-адрес, чтобы вам не приходилось записывать счет в файл или базу данных.