Tom: Formular mit Dateianhang

Beitrag lesen

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