PHP - количество загрузок
Вопрос
Как отобразить счетчик, который подсчитывает количество загрузок файла? Я видел это раньше. " Скачано 450 раз " ;. Спасибо.
Решение
Не позволяйте пользователю загружать файл напрямую, но с помощью сценария, подобного следующему ...
<?php
$file = Не позволяйте пользователю загружать файл напрямую, но с помощью сценария, подобного следующему ...
<*>REQUEST['file'];
$dldir = "downloads/";
if (
(file_exists($dldir.$file) && // file exists
(strpos($file, "../") === false) && // prevent an attacker from switching to a parent directory
) {
header('Content-type: '.mime_content_type($dldir.file));
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($dldir.$file) ."; ");
header('Content-Disposition: attachment; filename="'.$file.'"');
echo file_get_contents($dldir.$file);
/** Update the counter here, e.g. by using mysql **/
} else {
die("File not found");
}
?>
Другие советы
Если вы хотите сделать это с помощью PHP, вам нужно контролировать загрузку в PHP-скрипте. В основном это сводится к следующим двум строкам псевдокода:
set_number_of_downloads(get_number_of_downloads() + 1);
readfile($file_being_downloaded);
Вот вам . Кроме того, если вы предпочитаете использовать MySQL для постоянства, есть это решение .
В Apache вы можете использовать mod_rewrite для обновления базы данных при запросе файла. Это дает преимущество в скорости отправки (можно использовать sendfile), и вам не нужно менять свои URL или структуру каталогов.
#!/usr/bin/perl
$| = 1;
$dbh = DBI->connect("dbi:mysql:database=; host=localhost; user=; password=")
or die "Connecting from PHP to MySQL database failed: $DBI::errstr";
while (<STDIN>) {
$dbh->query(... update database ...);
print В Apache вы можете использовать mod_rewrite для обновления базы данных при запросе файла. Это дает преимущество в скорости отправки (можно использовать sendfile), и вам не нужно менять свои URL или структуру каталогов.
<*>
http://httpd.apache.org/docs/2.2 /mod/mod_rewrite.html#rewriteengine р>;
}
http://httpd.apache.org/docs/2.2 /mod/mod_rewrite.html#rewriteengine р>