Ich würde strikt davon abraten, Dateien auch wenn nur temporär auf dem server herumzukopieren.
Du kannst auch eine Datei direkt durch eine php-Seite „routen“. D.h. der user ruft eine php-seite (mit einigen Argumenten) und er erhält die gewünschte Datei. Hier ein Beispiel:
$filename = $image;
$ext = substr( $filename,-3 );
$basedir=„images/“;
einige Abfragen, um sicherzustellen, dass die Datei existiert.
if( $filename == „“ )
{
echo „ERROR: Empty file $filename to download. USE download.php?file=[file path]“;
exit;
}
elseif ( ! file_exists( $_SERVER[DOCUMENT_ROOT]."/".$basedir.$path."/".$filename) )
{
echo „ERROR: File „.$_SERVER[DOCUMENT_ROOT].“/“.$basedir.$path."/".$filename." not found. USE download.php?file=[file path]";
exit;
};
SEHR wichtig. Hier wird der MIME-type gesetzt.
switch(strtolower( $ext ))
{
case „pdf“: $ctype=„application/pdf“;$isimage=0;break;
case „exe“: $ctype=„application/octet-stream“;$isimage=0;break;
case „zip“: $ctype=„application/zip“;$isimage=0;break;
case „doc“: $ctype=„application/msword“;$isimage=0;break;
case „xls“: $ctype=„application/vnd.ms-excel“;$isimage=0;break;
case „ppt“: $ctype=„application/vnd.ms-powerpoint“;$isimage=0;break;
case „gif“: $ctype=„image/gif“;$isimage=1;break;
case „png“: $ctype=„image/png“;$isimage=1;break;
case „jpg“: $ctype=„image/jpg“;$isimage=1;break;
default: $ctype=„application/force-download“;
}
header(„Content-Type: $ctype“);
je nach browser muss man hier den dateinamen angeben, damit die Datei als solche erkannt wird. Das kann man sich bei Bilddateien aber ersparen.
$user_agent = strtolower ($_SERVER[„HTTP_USER_AGENT“]);
if ((is_integer (strpos($user_agent, „msie“))) && (is_integer (strpos($user_agent, „win“))))
{
header( „Content-Disposition: filename=“.basename($filename).";" );
}
else
{
header( „Content-Disposition: attachment; filename=“.basename($filename).";" );
}
Grösse der Datei angeben. Muss man aber auch nicht unbedingt. Nervt nur beim Download, wenn der Browser die Grösse nicht kennt…
header(„Content-Length: „.filesize($_SERVER[DOCUMENT_ROOT].“/“.$basedir.$path."/".$filename));
Ausgabe der Datei.
readfile($_SERVER[DOCUMENT_ROOT]."/".$basedir.$path."/".$filename);
exit();
?>
Eine mögliche Anfrage wäre also:
download.php?image=kleiner%20Hund.jpg
da kann man aber noch weitergehen und über ne datenbank viel mehr machen…
islaminhannover.de
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]