Ich mach das meist so, dass ich Downloadzähler sowie URL der Datei in einer Datenbank speicher und dann eine download.php?id=X aufrufen lasse, die dann in der Datenbank den Counter der Datei mit der ID X erhöht und dann zu dieser Datei weiterleitet. Eine, die ich neulich geschrieben hab, sieht zum Beispiel so aus:

PHP-Code:
<?php if (!isset ($_GET['id']))
{
    echo (
'Keine ID angegeben!');
}
else
{
    include (
'global.php');
    
$db->query ('SELECT COUNT(`ID`) FROM `bunterabend` WHERE `ID` = '.$_GET['id']);
    if (
$db->result() == 0)
    {
        echo (
'Ungültige ID angegeben!');
    }
    else
    {
        
$db->query ('SELECT `count` FROM `bunterabend` WHERE `ID` = '.$_GET['id']);
        
$count $db->result();
        
$count++;
        
$db->query ('UPDATE `bunterabend` SET `count` = '.$count.' WHERE `ID` = '.$_GET['id']);
        
$db->query ('SELECT `file` FROM `bunterabend` WHERE `ID` = '.$_GET['id']);
        
header ('Location: '.$db->result());
        exit();
    }
?>
Dies gibt natürlich auch keine Sicherheit, dass die Datei direkt aufgerufen wird, ohne dass das registriert wird, aber vielleicht noch mehr als mit diesem ?file=datei.zip. Natürlich lässt sich das hier auch irgendwie mit Textdateien verwirklichen, aber mit MySQL ist's wohl deutlich einfacher.