Es lässt sich sogar fast komplett transparent gestalten:
Ein Verzeichnis (z.B. /files), welches nur eine .htaccess enthält:
Code:
RewriteEngine on
RewriteBase /files/
RewriteRule ^(.+)$ /download.php\?file=$1
Alle Anfragen à la /files/Datei123.exe werden dann intern nach /download.php?file=Datei123.exe umgeleitet. Das Skript kann dann den Counter für die Datei erhöhen und die echte Datei123.exe an den Client weiterleiten ( readfile() ).
Meine download.php:
Code:
<?php
$filename = 'realfiles/' . $_GET['file'];
if (IsSet($_GET["file"]) && file_exists($filename) && strpos($filename,'../') === false)
{
require 'dblogin.php';
$dbh = mysql_login();
mysql_select_db('danny');
$stats_query = "SELECT count FROM downloads WHERE file='" . $_GET['file'] . "'";
$stats_result = mysql_query($stats_query);
if (mysql_num_rows($stats_result) > 0)
{
$stats_array = mysql_fetch_assoc($stats_result);
if ($stats_array['count'] !== null)
{
$stats_query = "UPDATE downloads SET count = count + 1 WHERE file='" . $_GET['file'] . "'";
mysql_query($stats_query);
}
}
mysql_close($dbh);
header('Content-type: application/force-download');
header('Content-length:' . filesize($filename));
readfile($filename);
} else {
header('Status: 404 Not Found');
chdir('errors');
require '404.php';
}
?>