PHP

Подсчет количества скачиваний при помощи PHP и .htaccess

У вас когда-нибудь появлялось желание располагать статистикой скачиваний тех или иных программ и файлов? Наверняка, да. Это можно легко осуществить, произведя ряд несложных настроек. Достаточно всего лишь привязать все ссылки для скачивания к одному php документу и настроить вывод загрузочного файла. А что если файл вызывается прямо в окне браузера, ну скажем вот так http://www.gayadesign.com/scripts/photonav/photonav.zip? Apache справится с данной задачей без проблем. И тут поможет файл дополнительной конфигурации веб-сервера Apache .htaccess.

Данный урок покажет вам как установить предзагрузочные параметры при помощи PHP и используя .htaccess.

Вы только подумайте о возможностях данного плагина! Он будет отслеживать количество скачиваний, проверять есть ли у пользователя права на загрузку определенного файла, установит лимит скачиваний и многое многое другое…

Возможность отслеживать скачивание файлов - это, то о чем мечтают многие разработчики.

Итак, что нам понадобится?

• веб-сервер Apache с включенным модулем перезаписи mod_rewrite
• хороший текстовый редактор (вроде notepad++)
• в данном уроке мы будем работать с PHP

Сначала нам надо подготовить .htaccess файл. Для этого вам надо либо настроить уже существующий, либо создать новый. Чтобы создать новый .htaccess файл в блокноте Notepad++, откройте новый документ и сохраните его под именем .htaccess. Данный файл выступает как скрытый в системе Unix.

Впишите следующие строки в свой .htaccess файл:
#Let's do rewriting! 
RewriteEngine on
RewriteRule ^(.*).(rar|zip|pdf)$ 
/download.php?file=$1.$2 [R,L] 

Они будут перенаправлять все файлы в форматах .rar, .zip и .pdf к файлу download.php, а путь к файлу использовать как параметр. При добавлении расширений, обязательно отделяйте их друг от друга при помощи вертикальной черты “|”.

Несколько примечаний, касающихся .htaccess файла:

Данный файл работает только с папкой, в которую он помещен, а так же с ее подкаталогами. Если файл размещен ну скажем в папке /files/, путь к нему не будет использован как параметр, вам придется добавлять его самостоятельно либо в download.php, либо в .htaccess файл.

Разместите созданный файл в корневую папку своего сайта.

Теперь мы создадим таблицу при помощи MySQL. Вы также можете сделать это, используя phpMyAdmin.

Если у вас уже есть таблица под названием download, то вам придется изменять SQL код.
CREATE TABLE `download` ( 
`filename` varchar(255) NOT NULL, 
`stats` int(11) NOT NULL, 
PRIMARY KEY (`filename`) 
)

Запустите SQL-оператор -- он создаст новую таблицу.

Ну вот пора бы заняться и PHP кодом.
Данный код позволит вам отслеживать все запросы на скачивание файлов при помощи созданной нами таблицы.
<?php 

//устанавливаем связь с базой данных 
mysql_connect("localhost", "username", "password") 
or die ("Sorry, can't connect to database."); 
mysql_select_db("dbname"); 

$filename = 
mysql_real_escape_string($_GET['file']); 
$path = $_SERVER['DOCUMENT_ROOT']."/"; 
//путь к файлу 
$fullPath = $path.$filename;
//указывает путь для скачивания файла 
$filetypes = array("rar","zip","pdf"); 
if (!in_array(substr($filename, -3), $filetypes)) 
{ 
echo "Invalid download type."; 
exit; 
} 

if ($fd = fopen ($fullPath, "r")) { 
//добавление статистики скачиваний 
$result = mysql_query("SELECT COUNT(*) AS 
countfile FROM download 
WHERE filename='" . $filename . "'"); 
$data = mysql_fetch_array($result); 
$q = ""; 

if ($data['countfile'] > 0) { 
$q = "UPDATE download SET stats = stats + 
1 WHERE 
filename = '" . $filename . "'"; 
} else { 
$q = "INSERT INTO download (filename, 
stats) VALUES 
('" . $filename . "', 1)"; 
} 
$statresult = mysql_query($q); 

//следующая часть выводит файл 
$fsize = filesize($fullPath); 
$path_parts = pathinfo($fullPath); 

header("Content-type: application/octet-
stream"); 
header("Content-Disposition: 
filename="".$path_parts["basename"]."""); 
header("Content-length: $fsize"); 
header("Cache-control: private");
//используется для прямого открытия файла
while(!feof($fd)) { 
$buffer = fread($fd, 2048);
echo $buffer; 
} 
} 
fclose ($fd);
exit; 


?>

Позвольте мне вкратце объяснить основные моменты кода, первая часть кода отвечает за связь с базой данных, не забудьте поставить значения, соответствующие вашим настройкам сервера.

Можете указать другие форматы в элементе $filetypes (понимает все популярные расширения файлов).

Вот в принципе и все!
Добавлено: 24 Августа 2013 01:31:42 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...