2009-10-27 4 views
1

Как я могу отобразить счетчик, который подсчитывает количество скачиваемых файлов? Я видел это раньше. «Скачан 450 раз». Благодарю.PHP - Количество загруженных раз

+1

Pls дайте нам знать, что вы пытались до сих пор. – KB22

ответ

6

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

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

?> 
+4

Также будьте осторожны, чтобы не разрешать загрузку файлов, таких как/etc/passwd, при создании пользовательских сценариев загрузки. – Kaivosukeltaja

+0

Я бы УКАЗАЛ, в какой папке для получения файла, не позволяйте (например, Kaivos .. сказал), пользователи захватывают файл от вас, как/etc/passwd. – Jakub

+0

Правильно ... Я добавил код, чтобы это не происходило. – ty812

1

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

2

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

set_number_of_downloads(get_number_of_downloads() + 1); 
readfile($file_being_downloaded); 
0

On 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

Смежные вопросы