У вас когда-нибудь появлялось желание располагать статистикой скачиваний тех или иных программ и файлов? Наверняка, да. Это можно легко осуществить, произведя ряд несложных настроек. Достаточно всего лишь привязать все ссылки для скачивания к одному 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 (понимает все популярные расширения файлов).
Вот в принципе и все!