Hello,
session_start();
//Überprüfung des Upload-Feldes
if (isset($_FILES['file']['name']) && trim($_FILES['file']['name']) != "") {
Du solltest immer mit der Auswertung des Fehlerwertes anfangen. Sollte der nämlich ungelich 0 sein, kannst Du Dir alle anderen Überprüfungen schenken.
if (isset($_FILES['file']['error']) and $_FILES['file']['error'] === 0)
Wenn der Wert === 0 ist (identisch 0) dann ist genau ein File fehlerfrei hochgeladen worden.
Der Error-wert könnte auch noch ein Array sein, dann wurden mehrere Files hochgeladen.
else {
$file_copy = "../tmp/".$_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'],$file_copy);
$_SESSION['file'] = $file_copy;
hier solltest Du sicherheitshalber basename($_FILES['file']['name']) benutzen, da man
Dir ggf. auch einen Pfad unterschieben könnte. In wieweit PHP hier schon selber
'kastrierend' tätig wird, weiß ich nicht.
$_SESSION['filetype'] = $_FILES['file']['type'];
Den MIME-Type des Files solltest Du lieber mit einer Funktion festelstellen
http://forum.de.selfhtml.org/archiv/2005/2/t100192/#m613445
}
}
//Attachment
if (isset($_SESSION['file'])) {
$filename = basename($_SESSION['file']);
aha, hier kommt also basename() ;-)
$datei_content = fread(fopen($_SESSION['file'],"r"),filesize($_SESSION['file']));
$datei_content = chunk_split(base64_encode($datei_content),76,"\n");
$header .= "\r\n\r\n--$boundary";
Header werden mit \r\n oder besser gesagt mit CRLF abgeschlossen!
Bei Base64 Abschnitten sit das \n aber richtig
$header .= "\r\nContent-Type: ".$_SESSION['filetype']."; name="".$filename.""";
$header .= "\r\nContent-Transfer-Encoding: base64";
$header .= "\r\nContent-Disposition: attachment; filename="".$filename.""";
$header .= "\r\n\r\n".$datei_content;
}
...
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau