Bei meiner Homepage mache ich das so:
Einen Ordner 'files' der nur eine .htaccess enthält:
Code:
RewriteEngine on
RewriteBase /files/
RewriteRule ^(.+)$ /download.php\?file=$1
Einen Ordner 'realfiles' der dann die Dateien enthält.
Eine download.php im Stammverzeichnis:
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';
}
?>
Das Ergebnis ist ein komplett transparenter Downloadcounter. Wenn der Client die Datei /files/abc.def anfragt, wird das intern auf /download.php?file=abc.def umgeleitet. Das Skript erhöht dann den Counter für die Datei um 1 (per
MySQL) und schickt die Datei /realfiles/abc.def an den Client.
Zitat von
Sergej:
mach einfach ne Weiterleitung auf die Datei
Code:
<?php
print "<meta http-equiv=\"refresh\" content=\"0;
URL=http://mein.host/meine.datei\">";
?>
Greetz Sergej
Wenn es schon eine Weiterleitung sein muss dann aber per
Code:
header("Location: http://mein.host/meine.datei");
und nicht per meta-refresh.