PHP - количество загрузок - PullRequest
       7

PHP - количество загрузок

1 голос
/ 27 октября 2009

Как отобразить счетчик, который подсчитывает количество загрузок файла? Я видел это раньше. "Скачано 450 раз". Спасибо.

Ответы [ 4 ]

6 голосов
/ 27 октября 2009

Не позволяйте пользователю загружать файл напрямую, а через скрипт, подобный следующему ...

<?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");
   }

?>
2 голосов
/ 27 октября 2009

Если вы хотите сделать это с PHP, вам нужно контролировать загрузку в PHP-скрипте. В основном это сводится к следующим двум строкам псевдокода:

set_number_of_downloads(get_number_of_downloads() + 1);
readfile($file_being_downloaded);
1 голос
/ 27 октября 2009

Там вы идете. Кроме того, если вы предпочитаете использовать MySQL для сохранения, есть это решение.

0 голосов
/ 27 октября 2009

В 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 $_;
}

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteengine

...