{% else-1 %}
(15 фев 2014, 01:41) (0/0) [0]
ByUNNAMED, *
(7 янв 2014, 05:11) (0/0) [0]
Bimax™, комп сдох *
(7 янв 2014, 05:07) (0/0) [0]
Sasha Name,и что теперь ? Е\"ануться об стол и не встать ? *
(7 янв 2014, 05:02) (0/0) [0]
Sasha Note, сарказм
(7 янв 2014, 04:56) (1/0) [1]
Для PHP Для начала давайте
определимся, что
именно нам надо делать. При
клике на ссылку, для
подсчета количества кликов,
нам надо специальным скриптом засчитать клик, а
после предоставить
посетителю интересующую
его информацию
(сделать редирект на
нужный файл). В принципе, последовательность (за счет
клика и выдача
информации) можно
поменять местами, однако
учтите, что если счетчик
используется для подсчета скачиваний файлов, то для
того чтобы после скачки
файла выполнялся скрипт,
потребуется писать
специальный скрипт-
загрузчик файлов. Зачем вам лишние проблемы? Такой же
принцип работы будет
и у счетчика посещений. В
данном случае, для
ускорения загрузки
страницы можно обойтись без
редиректа, а просто вставить
код счетчика в
загружаемую страницу. Вроде разобрались, так? Ну, а
теперь давайте
приступим к разборке не
сложного кода для
реализации всех наших
идей. Для простоты пример, а также для того чтобы скрипт
мог работать на
любом хостинге, данные
будем хранить в файле. <?php
$f=fopen(\"stat.dat\",\"a+\"*;
flock($f,LOCK_EX);
$count=fread($f,100);
Удалён
ftruncate($f,0); fwrite($f,$count);
fflush($f);
flock($f,LOCK_UN);
fclose($f);
?> Да, вы не ошиблись, это и
есть весь скрипт. А теперь
давайте разберемся, что и как
в нем работает.
Первой строчкой кода -
$f=fopen(\"stat.dat\",\"a+\"*; мы открываем файл stat.dat для
чтения и записи,
связываем его с файловой
переменной $f. Именно
этот файл будет хранить
данные о состоянии счетчика. Для правильной
работы советую
устанавливать для данного
файла права доступа 777
или аналогичные с полным
доступом на чтение и запись. Следующая строчка - flock
($f,LOCK_EX); очень важна
для работоспособности
скрипта. Что она делает? Она на время работы данного
скрипта (или до ее снятия)
блокирует доступ к файлу
для других скриптов или
копии данного. Почему это
так важно? Давайте представим ситуацию: в тот
момент, когда
пользователь1 кликает на
ссылку, запускающую
скрипт подсчета кликов, по
той же ссылке кликает пользователь2, запуская
копию того же скрипта. Как
вы увидите далее, в
зависимости от того, на какой
стадии выполнения
находится скрипт, запущенный
пользователем1, скрипт
запущенный
пользователем2 и
работающий параллельно со
своей копией может попросту обнулить счетчик.
Эту
ошибку допускают
практически все начинающие
программисты на PHP,
создавая подобные счетчики. Теперь, я думаю ясно, зачем
нам блокировка доступа к
файлу - в данном случае
скрипт, запущенный
пользователем2 будет ждать
пока отработает скрипт, запущенный пользователем1
(не стоит пугаться, что это
замедлит загрузку страниц -
даже дамые медленные
серверы выполняют данный
скрипт за сотые доли секунды). С 3-й строчкой кода
$count=fread($f,100); все ясно.
В
переменную $count
считываем значение счетчика.
Далее, страхуясь от ошибок ввода/вывода (в
частности чтения)
засчитываем клик/
посещение,
увеличивая значение
счетчика на единицу @ $count+ +; Теперь нам осталось
произвести запись в файл
обновленных данных. Для
этого нужно
предварительно очистить
файл ftruncate( $f,0); вот тут и может возникнуть та
опасная ситуация с
обнулением счетчика, про
которую я говорил.
Однако мы используем
блокировку файла, так что бояться нечего. Записываем обновленные
данные о значении
счетчика fwrite( $f,$count); Для надежности
принудительно очищаем
буфер
ввода/вывода для данного
файла fflush( $f);
Снимаем блокировку с файла flock($f,LOCK_UN); на
самом деле ее можно не
снимать - она
автоматически снимается
после закрытия файла.
Однако для полноты примера я ее все же написал.
Закрытие файла fclose($f);
тоже не обязательная
функция т.к. все открытые
скриптом файлы, после
завершения его работы, автоматически
закрываются. Но опять же, для полноты примера... Кроме того, если на этом
скрипт не заканчивается, а
работать с файлом более не
понадобится,
рекомендуется сразу же
закрывать файл. Ну вот и все. Как видите
совсем не сложно. Теперь
для подсчета количества
посещений, просто
вставляйте данный код в
страницу. А если же вы захотели подсчитать
количество скачек какого-то
файла, то вставляйте данный
код в отдельный PHP
файл, ссылку с имени файла
заменяем на ссылку на данный скрипт, а в конец
скрипта дописываем
редирект на файл для скачки.
Лучше всего его
выполнить на PHP: Header(\"
location:/download_dir/ file_to_download.rar\"*; Надо же еще выводить
значение счетчика, иначе считать то зачем . Значения, разумеется,
берем из файла. Можно
сделать как в примере
самого счетчика: <?php
$f=fopen(\"stat.dat\",\"a+\"*;
flock($f,LOCK_EX);
$count=fread($f,100);
flock($f,LOCK_UN);
fclose($f); echo \"Количество скачек/
кликов: $count\";
?> flock можно
чтение параметров и
несколько упростить,
например, так: <?php
$s=file(\"stat.dat\"*;
echo \"Количество скачек/
кликов: $s[0]\";
?>
  • 1 из 1