количество скачиваний php
Сегодня будет короткая заметка, посвященная статистике, ведь каждому, наверное, интересно, сколько раз скачали с его сайта тот или иной файл. Я не хотел делать все это дело на файлах, чтобы не захламлять сервер, пусть лучше эта информация хранится в базе данных.
Создаем файл конфигурации, чтобы в каждом файле пароли не хранить.
config.php

1
2
3
4
5
6
<?php
$CONFIG['mysql']['host']='localhost';
$CONFIG['mysql']['login']='root';
$CONFIG['mysql']['password']='';
$CONFIG['mysql']['db']='test';
?>

До того, как переходить к главному файлу нашей системы, нужно создать в базе данных таблицу с двумя полями и вставить туда пару записей о файлах, с которыми мы хотим работать.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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>";
?>

И теперь в том месте, где надо нам вывести статистику вставляем код

1
2
3
4
<?php
   $stats = file_get_contents('http://localhost/downloader/counter.php');
   echo $stats;
?>

Ничего сложного как и все гениальное =)
Пример можно улучшить, если нужны более точные данные, например не хотим учитывать скачивания дважды с одного компьютера. Для этого нужно воспользоваться кукисами в файле download.php. А в тексте ссылки вместо прямого обращения к файлу, нужно указать скрипт:

1
2
3
<a href="http://localhost/downloads/download.php?file=catalogpdf">
Скачать каталог в PDF формате
</a>

Вот и все, будьте в курсе количества скачиваний ваших файлов =)