Отправляет email-рассылки с помощью сервиса Sendsay

PHP-песочница

  Все выпуски  

PHP-песочница Выпуск 17


Php-«песочница»

Выпуск 17.
Создадим счётчик скачиваний файлов
.

Здравствуйте. С вами Андрей Чернобай с новым выпуском "Песочницы".

Каждый web-мастер мечтает, чтобы его ресурс стал самым популярным. И естественно желание узнать, насколько он популярен. То есть, иметь об этом определённую статистику. Скрипты в этом деле незаменимые помощники. В одном из выпусков рассылки мы уже рассматривали скрипт, который подсчитывает количество посещений страницы или просмотров той или иной статьи. Сегодня рассмотрим устройство ещё одного полезного инструмента – счётчика скачиваний файлов.

Вы, наверняка, видели такие счётчики: рядом со ссылкой на скачивание файла надпись «Скачали … раз», что-то в этом роде. Сказать по правде, не знаю, для чего такую статистику выводить на странице. (В том числе и статистику просмотра самих страниц.) Что этим хотят показать? Насколько популярен сайт? Но, возможно, сайт создан недавно и о нём ещё не прознали, возможно, автор не освоил в полной мере способы раскрутки, возможно, статья только что выложена и вы первый посетитель данной страницы… а материал – первоклассный! И что, вы закроете страницу только потому, что на ней нет счётчиков или они есть, но не зашкаливают? Тогда вам, извините, к психиатру. А с остальными продолжим.

Итак, как я выразил, мне не ясно, на кой выводить статистику на саму страницу, однако очень даже понятно, когда статистика выводится в админской панели – это нормально и естественно. Вот я и предлагаю в сегодняшней статье не только создать счётчик скачиваний, а ещё и админку к нему. Это не будет полноценная админка, конечно, просто выведем статистику не на саму страницу со ссылками, а на страницу в администраторском разделе.

Думаю, задача в общих чертах ясна.

Существует много готовых счётчиков, но я предлагаю потренироваться и создать свой. Это будет довольно простой счётчик. (Я недавно нашёл один интересный скрипт как раз для подсчёта скачиваний, только в нём всё на английском. Сейчас я привожу его к «отечественному виду», потом потестирую на своём сайте, а потом поделюсь.)

Для выполнения упражнения предлагаю создать в Денвере отдельную папку для сайта. Пусть её имя будет count. В ней, как всегда, www. И в ней, как всегда, index.php, а также файлы couter.php, в котором будет скрипт, и admin.php – это страница, куда будет выводиться статистика, доступная взору лишь админа. И ещё в папке www создадим папку archives, куда поместим пару заархивированных файлов, скачивание которых и будем отслеживать. Как вы понимаете, содержание файлов сейчас значения не имеет. Статистика должна где-то храниться. Хранить её будем в текстовых файлах: archiv1.txt и archiv2.txt. Создайте эти файлы тоже и пускай они будут в одной папке со счётчиком, то есть, с файлом counter.php, который в главной директории сайта. На этом подготовительные работы закончены.

Ещё раз озвучим схематически, что у нас есть.

У нас есть сайт count. На этом сайте нужно подсчитывать количество скачиваний заархивированных файлов archiv1.rar и archiv2.rar, которые в папке archives. Ссылки на скачивание находятся на странице index.php. Сам скрипт в файле counter.php. Статистика хранится в текстовых файлах archiv1.txt и archiv2.txt и выводится на страницу admin.php.

Можно, конечно, было бы использовать базу данных, где информацию хранить намного надёжней. Кроме того, на большом сайте без базы данных действительно не обойтись, потому что со временем количество текстовых файлов достигнет огромного числа. Но это сложней в объяснении, а рассылка всё ж таки для новичков, так что для тех, кто хочет освоить работу с базой данных, рекомендую этот курс, потому что в нём всё подробно до мелочей, наглядно и профессионально.

Открываем index.php в редакторе и создаём две ссылки на архивы archiv1.rar и archiv2.rar.

Сначала сделаем так, чтобы количество скачиваний выводилось рядом со ссылками. То есть, открыв страницу, мы видим ссылки и рядом с ними «Скачиваний: 20 (к примеру)».

Как это работает? Когда загружается страница со ссылками, происходит обращение к файлам archiv1.txt и archiv2.txt, где хранятся данные. Как только пользователь нажимает на ссылку, запускается скрипт counter.php, который увеличивает переменную на 1 и записывает в соответствующий данной ссылке файл.

Перейдём к практике.

Как это должно работать? Вот так:

- если (нажата первая ссылка) {запускаем счётчик 1} иначе если (нажата вторая ссылка) {запускаем счётчик 2} и т. д.

Очевидно, использовать нужно конструкцию if – else.

Открываем counter.php в своём редакторе и пишем

<?php
if ($archiv == 1)
{
header("Location: http://count/archives/archiv1.rar"); //переход на файл, который нужно скачать; обратите внимание, что нужно указать полный путь к скачиваемому архиву
$file = fopen("archiv1.txt", "a+"); //открываем файл для чтения и добавления данных в конец файла; если файла нет, он будет создан
flock($file, LOCK_EX); //блокировка открытого файла на случай одновременного обращения к одному файлу несколькими пользователями
$count = fread ($file, 100); //чтение
$count++; //увеличение значение на 1
ftruncate ($file, 0); // очищаем файл
fwrite ($file, $count); //записываем новое значение
flock ($file, LOCK_UN); //разблокируем
fclose ($file); //закрываем файл
}
else if ($archiv == 2)
{
header ("Location:http://count/archives/archiv2.rar");
$file = fopen ("archiv2.txt", "a+");
flock($file, LOCK_EX);
$count=fread($file, 100);
$count++;
ftruncate ($file, 0);
fwrite($file, $count);
flock($file, LOCK_UN);
fclose($file);
}
?>

В общем-то, всё должно быть понятно. Единственно, остаётся вопрос: как сделать, чтобы при нажатии на определённую ссылку присваивалась именно та переменная, которая нужна?

Рассмотрим, как создаются ссылки.

Когда мы создаём ссылки, мы пишем адрес таким образом: например, http://имя_сайта.ru/index.php. Но наверняка вы замечали конструкцию, похожую на эту: http://имя_сайта.ru/index.php?параметры.

Такая ссылка состоит как бы из двух частей: до знака ? – адрес сайта; после ? – некоторые параметры. Этими параметрами, как правило, являются переменные и их значения:

http://имя_сайта.ru/index.php?переменная=значение

(Бывает, в ссылке несколько переменных, тогда между ними ставится знак &. То есть, выглядит это так:

http://имя_сайта.ru/index.php?переменная_1=значение&переменная_2=значение.)

Когда пользователь открывает данную страницу, переменные присваиваются автоматически. Такой метод передачи данных называется GET (в отличие от POST, которым мы пользовались при передаче данных из формы в уроках по созданию скрипта для комментариев).

Теперь применим эти знания к нашим ссылкам.

По идее, они у вас выглядят сейчас так:

<a href="archives/archiv1.rar"> Первая ссылка </a>

<a href="archives/archiv2.rar"> Вторая ссылка </a>

А изменим их так:

<a href="counter.php?archiv=1"> Первая ссылка </a>

<a href="counter.php?archiv=2"> Вторая ссылка </a>

То есть, сначала идёт обращение к файлу со скриптом-счётчиком (counter.php), затем к переменной archiv, которой присвоено то или иное значение (1, 2 и т. д.).

В самом скрипте хочу обратить ваше внимание на функцию header (). Эта функция осуществляет переход на указанный адрес. Особенность этой функции в том, что располагаться она должна до html-кода, если таковой имеется на странице.

Ну, а с остальными функциями мы раньше встречались.

Сохраним изменения в файлах; откроем index.php в браузере (сервер сначала запустили) и кликнем на одной ссылке, потом на другой, скачав архивы. Проверьте текстовые файлы, в них должна записаться 1. скачайте несколько раз каждый архив, проверьте, записываются ли результаты.

Теперь выведем количество скачиваний на страницу рядом с ссылкой.

Это делается в index.php. Добавим следующий код:

<a href="counter.php?archiv=1">Первая ссылка </a>
<?php
$f1 = fopen ("archiv1.txt", "r"); //открыли текстовый файл для чтения
$count1 = fread ($f1, 1000); //прочитали
echo " (Скачиваний: " .$count1. " )"; //выводим на страницу
fclose($f1);//закрываем файл
?>
<a href="counter.php?archiv=2"> Вторая ссылка </a>
<?php
$f2 = fopen ("archiv2.txt", "r");
$count2 = fread ($f2, 1000);
echo " (Скачиваний: " .$count2. " )";
fclose($f2);
?>

Сохраните изменения, перейдите в браузер и обновите страницу. У меня рядом с ссылками появилось: «(Скачиваний: 2)». Надеюсь, у вас тоже.

Осталось перенести эту статистику на страницу админской панели.

Нет ничего проще. Просто копируем весь код из index.php в admin.php только и всего. Естественно, теперь из index.php можно убрать скрипты (если нет намерения выводить статистику на всеобщее обозрение). А в коде admin.php из ссылок можно убрать теги, делающие ссылками заголовки «Первая ссылка» и «Вторая ссылка» - мы ведь сами у себя не собираемся скачивать. Ну, само собой, можно оформить страницы поинтересней, но это вы и без меня уже умеете.

Успехов.


PHP + MySQL для начинающих

Разделим моё партнёрское вознаграждение


И ещё. Для тех, кто следил за эволюцией скрипта для добавления комментариев: сейчас по этой теме уже набралось десять статей, можете с ними ознакомиться. Лучше всего начинать отсюда (Урок 20+). Благодаря одному из читателей в скрипте исправлены некоторые погрешности, так что проверяйте.

P. S. Остальные уроки Вы найдёте как всегда здесь. Все возникающие вопросы Вы можете задать, прислав мне письмо на электроный адрес (см. подпись к выпуску) или через форму для добавления комментариев на страницах сайта.

Автор расылки: Андрей Чернобай
kapitansg@yandex.ru


В избранное