Сегодня будет короткая заметка, посвященная статистике, ведь каждому, наверное, интересно, сколько раз скачали с его сайта тот или иной файл. Я не хотел делать все это дело на файлах, чтобы не захламлять сервер, пусть лучше эта информация хранится в базе данных.
Создаем файл конфигурации, чтобы в каждом файле пароли не хранить.
config.php
<?php
$CONFIG['mysql']['host']='localhost';
$CONFIG['mysql']['login']='root';
$CONFIG['mysql']['password']='';
$CONFIG['mysql']['db']='test';
?>
До того, как переходить к главному файлу нашей системы, нужно создать в базе данных таблицу с двумя полями и вставить туда пару записей о файлах, с которыми мы хотим работать.
CREATE TABLE `downloads` (
`filename` TEXT NOT NULL ,
`counter` INT NOT NULL
) ENGINE = InnoDB;
</pre>
Теперь пару записей
<pre class="sql" name="code">
INSERT INTO `test`.`downloads` (
`filename` ,
`counter`
)
VALUES (
'catalog.pdf', '0'
), (
'catalog.rar', '0'
);
А теперь главный файл, к которому мы и будем обращаться при расстановки ссылок для тех файлов, для которых мы хотим вести статистику скачиваний.
download.php
<?php
require_once 'config.php';
//соединение с БД или вывод ошибки и выход
$conn = mysql_connect($CONFIG['mysql']['host'], $CONFIG['mysql']['login'], $CONFIG['mysql']['password']) or die(mysql_error());
@mysql_select_db($CONFIG['mysql']['db'], $conn);
//проверяем какой файл пытаются скачать
switch ($_GET['file']) {
case 'catalogpdf':
$sql = "UPDATE downloads SET `counter` = `counter` + 1 WHERE `filename`='catalog.pdf'";
mysql_query($sql);
mysql_close($conn);
header('Location: /files/catalog.pdf');
case 'mikasa2010rar':
$sql = "UPDATE downloads SET `counter` = `counter` + 1 WHERE `filename`='catalog.rar'";
header('Location: /files/catalog.rar');
mysql_query($sql);
mysql_close($conn);
default:
mysql_close($conn);
break;
}
?>
Здесь ничего сложного, проверяем какой файл пытаются скачать и увеличиваем количество скачиваний в базе данных на единицу.
Файл вывода статистики counter.php
<?php
require_once 'config.php';
$conn = mysql_connect($CONFIG['mysql']['host'], $CONFIG['mysql']['login'], $CONFIG['mysql']['password']) or die('mysql error');
@mysql_select_db($CONFIG['mysql']['db'], $conn);
$sql = 'SELECT downloads.filename, downloads.counter FROM downloads';
$res = mysql_query($sql, $conn);
//составляем красивый вывод в таблице
echo "<table cellspacing=10>";
while ($row = mysql_fetch_array($res)) {
echo "<tr><td>";
echo $row['filename'] . '</td><td><b style="font-size: 16px; color: blue">'
. $row['counter'] . '</b></td></tr>';
}
echo "</table>";
?>
И теперь в том месте, где надо нам вывести статистику вставляем код
<?php
$stats = file_get_contents('http://localhost/downloader/counter.php');
echo $stats;
?>
Ничего сложного как и все гениальное =)
Пример можно улучшить, если нужны более точные данные, например не хотим учитывать скачивания дважды с одного компьютера. Для этого нужно воспользоваться кукисами в файле download.php. А в тексте ссылки вместо прямого обращения к файлу, нужно указать скрипт:
<a href="http://localhost/downloads/download.php?file=catalogpdf">
Скачать каталог в PDF формате
</a>
Вот и все, будьте в курсе количества скачиваний ваших файлов =)