Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скрипт написания счетчика?
 
 автор: Sl   (16.11.2006 в 22:16)   письмо автору
 
 

Здравствуйте. Я хочу на своем сайте сделать количество просмотров какой - нибудь страницы
Т.е должно быть так: эту страницу просмотрели 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; // печатаем величину счетчика
?>

   
 
 автор: DEM   (16.11.2006 в 22:32)   письмо автору
 
   для: Sl   (16.11.2006 в 22:16)
 

А что значит:

fclose(fopen($file, "a+b")); // создаем первоначально пустой файл
$f = fopen($file, "r+t"); // открываем файл счетчика


что делает А+B и R+T?

   
 
 автор: Sl   (17.11.2006 в 09:30)   письмо автору
 
   для: DEM   (16.11.2006 в 22:32)
 

b и t не обязательные символы. Если указан b, то файл открывается в режиме
бинарного чтения,записи. Если t, то для файла устанавливается режим трансляции
символа перевода строки.

   
 
 автор: NERUM   (16.11.2006 в 22:35)   письмо автору
 
   для: Sl   (16.11.2006 в 22:16)
 

Можно записать ip в сессию, и сделать проверку, то есть записан ли данный ip в сессию или нет,
если записан, не добавлять единицу в файл счетчика, а нет в сессии такого ip то добавить...

   
 
 автор: Sl   (17.11.2006 в 09:32)   письмо автору
 
   для: NERUM   (16.11.2006 в 22:35)
 

Хорошо я попробую :)

   
 
 автор: Loki   (17.11.2006 в 09:57)   письмо автору
 
   для: Sl   (16.11.2006 в 22:16)
 

Пошите в сессию идентификатор страницы. При заходе на страницу - проверяете его наличие в сессии, если нету - увеличиваем счетчик на единицу и пишем идентификатор в сессию.

   
 
 автор: Sl   (17.11.2006 в 14:30)   письмо автору
 
   для: 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 клиента??

   
 
 автор: Loki   (17.11.2006 в 15:54)   письмо автору
 
   для: Sl   (17.11.2006 в 14:30)
 

>Счетчик увеличится если пользователь зайдет один раз на страницу
Неверно. Счетчик увеличится если пользователь зайдет один раз на сайт вообще.

>Этим выражением $ip = $_SERVER['REMOTE_ADDR']; я действительно определю
реальный ip клиента??
нет. Вроде как только адрес последней прокси.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования