Уроки PHP для начинающих


Счётчик скачиваний файлов.

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

Вы, наверняка, видели такие счётчики: рядом со ссылкой на скачивание файла надпись «Скачали … раз», что-то в этом роде.

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

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

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

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

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

Определимся со структурой счётчика. Она приведена на рисунке:

скрипт счётчика скачиваний

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

Да, забыл ещё один важный момент: статистика должна где-то храниться. Хранить её будем в текстовых файлах: archiv1.txt и archiv2.txt. Создайте эти файлы самостоятельно. Я их, конечно, тоже создал, и поместил в одной папке со счётчиком, то есть, с файлом counter.php, который в главной директории сайта.

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

Открываем 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>

В самом скрипте хочу обратить ваше внимание на функцию 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 из ссылок можно убрать теги, делающие ссылками заголовки «Первая ссылка» и «Вторая ссылка» - мы ведь сами у себя не собираемся скачивать. Ну, само собой, можно оформить страницы поинтересней, но это вы и без меня уже умеете.

Успехов.

Автор: Андрей Чернобай

P. S. Подпишитесь на безплатную рассылку Вокруг Сайта и получайте на свой электронный адрес новые уроки по созданию сайта.

Оставьте свой отзыв о статье:



Введите цифровой код с картинки*:


Комментарий добавил(а): станислав
15-03-2012
19 час. 37 мин.

Комментарий:
Здравствуйте,а как вывести счетчик в джумле,что то непойму как цифра скачавших в материале отобразить

Ответ: Здравствуйте, Станислав. Для Joomla существуют специальные плагины для вывода статистики. Вот я нашёл через Яндекс по запросу "счётчик скачивания файлов"+джумла две ссылки об этом: http://joomlaforum.ru/index.php/topic,194432.0.html; http://joomlaforum.ru/index.php/topic,46253.0.html. (на самом деле, ответов по запросу было больше, так что можете посмотреть, если по этим ссылкам ничего подходящего нет)

Новое на сайте

Другие статьи...

Видеокурсы

Рассылки

"Вокруг Сайта"
подпишитесь и получайте на свой e-mail уроки, книги, статьи, скрипты, а также подарки и скидки на товары, продаваемые с сайта

SmartResponder.ru
Ваше имя: *
Ваш e-mail: *

"PHP-песочница"
- PHP для начинающих: уроки с подробным анализом скриптов, необходимых для вашего сайта:

PHP-песочница
Подписаться письмом

Разделы Сайта