PHP - Nombre de fois téléchargé
Question
Comment puis-je afficher un compteur qui compte le nombre de téléchargements d'un fichier? Je l'ai déjà vu "Téléchargé 450 fois". Merci.
La solution
Ne laissez pas l'utilisateur télécharger un fichier directement, mais via un script semblable à celui-ci ...
<?php
$file = Ne laissez pas l'utilisateur télécharger un fichier directement, mais via un script semblable à celui-ci ...
<*>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");
}
?>
Autres conseils
Si vous voulez le faire avec PHP, vous devez contrôler le téléchargement dans un script PHP. En gros, il s’agit des deux lignes de pseudo-code suivantes:
set_number_of_downloads(get_number_of_downloads() + 1);
readfile($file_being_downloaded);
Sous Apache, mod_rewrite pourrait mettre à jour une base de données lorsque le fichier est demandé. Cela présente l’avantage de la rapidité d’envoi (sendfile peut être utilisé) et vous n’aurez pas à changer vos URL ni votre structure de répertoires.
#!/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 Sous Apache, mod_rewrite pourrait mettre à jour une base de données lorsque le fichier est demandé. Cela présente l’avantage de la rapidité d’envoi (sendfile peut être utilisé) et vous n’aurez pas à changer vos URL ni votre structure de répertoires.
<*>
http://httpd.apache.org/docs/2.2 /mod/mod_rewrite.html#rewriteengine
;
}
http://httpd.apache.org/docs/2.2 /mod/mod_rewrite.html#rewriteengine