| |
|
|
| | Здравствуйте. Я хочу на своем сайте сделать количество просмотров какой - нибудь страницы
Т.е должно быть так: эту страницу просмотрели X раз
Проблема в том что когда обновляешь страницу с счетчиком, счетчик каждый раз увеличивается
Это и понятно. Но я хочу сделать так, чтобы счетчик всего один раз увеличивался, когда
пользователь зайдет на страницу. Т.е уже при обновлении браузера счетчик
не должен увеличиваться. Счетчик должен опять увеличиться если заного открыть браузер
и заного зайти на туже страницу. Такая система на мой взгляд наиболее правильная. На сайте
будет показываться истинное значение количества просмотров страницы
Я предпологаю что это делается с сессиями. Но вот незнаю как это сделать
Я очень надеюсь что вы мне поможете с этим примером, потому что для меня важно
что бы скрипт работал именно так, как я тут рассказал.
Вот счетчик:
<?
$file = "counter.dat";
fclose(fopen($file, "a+b")); // создаем первоначально пустой файл
$f = fopen($file, "r+t"); // открываем файл счетчика
flock($f, LOCK_EX); // дальше работаем только мы
$count = fread($f, 100); // читаем значение, сохраненное в файле
$count = $count+1; // увеличиваем его на 1
ftruncate($f, 0); // очищаем файл
fseek($f, 0, SEEK_SET); // переходим в начало файла
fwrite($f, $count); // записываем новое значение
fclose($f); // закрываем файл
echo $count; // печатаем величину счетчика
?> | |
| |
|
|
| |
|
|
| |
для: Sl
(16.11.2006 в 22:16)
| | | А что значит:
fclose(fopen($file, "a+b")); // создаем первоначально пустой файл
$f = fopen($file, "r+t"); // открываем файл счетчика
что делает А+B и R+T? | |
| |
|
|
| |
|
|
| |
для: DEM
(16.11.2006 в 22:32)
| | | b и t не обязательные символы. Если указан b, то файл открывается в режиме
бинарного чтения,записи. Если t, то для файла устанавливается режим трансляции
символа перевода строки. | |
| |
|
|
| |
|
|
| |
для: Sl
(16.11.2006 в 22:16)
| | | Можно записать ip в сессию, и сделать проверку, то есть записан ли данный ip в сессию или нет,
если записан, не добавлять единицу в файл счетчика, а нет в сессии такого ip то добавить... | |
| |
|
|
| |
|
|
| |
для: NERUM
(16.11.2006 в 22:35)
| | | Хорошо я попробую :) | |
| |
|
|
| |
|
|
| |
для: Sl
(16.11.2006 в 22:16)
| | | Пошите в сессию идентификатор страницы. При заходе на страницу - проверяете его наличие в сессии, если нету - увеличиваем счетчик на единицу и пишем идентификатор в сессию. | |
| |
|
|
| |
|
|
| |
для: Loki
(17.11.2006 в 09:57)
| | | <?php ## Скрипт-счетчик с приминением сессий.
session_start();
$ip = $_SERVER['REMOTE_ADDR']; # Определяем ip
$file = "counter.dat";
fclose(fopen($file, "a+b")); # Считываем пока файл
$f = fopen($file, "r+t");
flock($f, LOCK_EX);
if(!($count = fread($f, 100))) $count=0; # Если в файле пусто устанавливаем 0
if(!$_SESSION['ip']) # Если нет ip записываем его в сессию и увеличиваем счетчик
{ # Также записываем новое значение в файл
$_SESSION['ip']=$ip;
$count+=1;
ftruncate($f, 0);
fseek($f, 0, SEEK_SET);
fwrite($f, $count);
fclose($f);
echo "<em>просмотров </em>".$count;
}
else
{
fclose($f);
echo "<em>просмотров </em>".$count;
}
?>
Вот готовый вариант :)
Я все полностью проверил. Это скрипт работает так как надо.
Но кажись я этот скрипт сделал без индификаторов сессий
Счетчик увеличится если пользователь зайдет один раз на страницу. Кнопка 'обновить' в браузере уже не увеличивает счетчик. Чтобы счетчик снова увеличился надо заного открыть браузер.
-----
Господа; проверьте пожалуйста скрипт на ошибки. Еще вопрос есть.
Этим выражением $ip = $_SERVER['REMOTE_ADDR']; я действительно определю
реальный ip клиента?? | |
| |
|
|
| |
|
|
| |
для: Sl
(17.11.2006 в 14:30)
| | | >Счетчик увеличится если пользователь зайдет один раз на страницу
Неверно. Счетчик увеличится если пользователь зайдет один раз на сайт вообще.
>Этим выражением $ip = $_SERVER['REMOTE_ADDR']; я действительно определю
реальный ip клиента??
нет. Вроде как только адрес последней прокси. | |
| |
|
|