PHP - Numero di volte scaricato
Domanda
Come posso visualizzare un contatore che conta il numero di volte in cui un file viene scaricato? L'ho visto prima. "Scaricato 450 volte". Grazie.
Soluzione
Non consentire all'utente di scaricare direttamente un file, ma tramite uno script come il seguente ...
<?php
$file = Non consentire all'utente di scaricare direttamente un file, ma tramite uno script come il seguente ...
<*>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");
}
?>
Altri suggerimenti
Se vuoi farlo con PHP, devi controllare il download in uno script PHP. Fondamentalmente si riduce alle seguenti due righe di pseudo-codice:
set_number_of_downloads(get_number_of_downloads() + 1);
readfile($file_being_downloaded);
Su Apache potresti avere mod_rewrite ad aggiornare un database quando viene richiesto il file. Questo ha il vantaggio della velocità di invio (è possibile utilizzare sendfile) e non è necessario modificare gli URL o la struttura della directory.
#!/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 Su Apache potresti avere mod_rewrite ad aggiornare un database quando viene richiesto il file. Questo ha il vantaggio della velocità di invio (è possibile utilizzare sendfile) e non è necessario modificare gli URL o la struttura della directory.
<*>
http://httpd.apache.org/docs/2.2 /mod/mod_rewrite.html#rewriteengine
;
}
http://httpd.apache.org/docs/2.2 /mod/mod_rewrite.html#rewriteengine