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.

Était-ce utile?

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);

Voilà . De même, si vous préférez utiliser MySQL pour la persistance, utilisez la solution .

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top