Ingo: Binär vs. Textdatei in Attachmets

Hi,

u.a. mittels

//Binär und Textdatei unterscheiden
    $fileContent = imap_fetchbody($mbox,$num,$j+2);
    if($binar == 1)
     {
      $fileContent = imap_base64($fileContent);
     }

//Attachment speichern
    $fp = fopen($cfgAttachDir."/".$filepath ,"w+");
    fwrite ($fp,$fileContent);
    fclose($fp);
    $attachment++;

lese ich die Attachments einer eMail aus und speicher diese dann auf dem Server.
Ich habe Probleme bei der Unterscheidung zwischen Binär- und Textdaten. Wenn ich $fileContent so in die Datei schreieb, dann werden Textdateien richtig gespeichert und z.B Bilder nicht. Wenn ich imap_base64($fileContent) benutze habe ich das Problem umgekehrt - textdateien sind ungültig, bilder ok.

Wie kann ich unterscheiden, ob ich Binär oder textdaten in der Anlage habe, welche ich dann speichern will?

Dann könnte ich das über $binar == 1 oder 0 steuern ...

Danke,

Ingo

  1. Hello,

    $fp = fopen($cfgAttachDir."/".$filepath ,"w+");

    Du hast aber nicht dazugeschrieben, welches OS Du nutzt. Das hat Auswirkungen.

    Sicherheitshalber solltest Du die Datei immer mit

    $fp = fopen($cfgAttachDir."/".$filepath ,"wb+");

    öffnen, wenn Du einen übertragenen Bytestream 1:1 abspeichern willst.
    Die mit base64 codierten Daten müssen natürlich auch vorher wieder decodiert werden.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hi,

      Du hast aber nicht dazugeschrieben, welches OS Du nutzt. Das hat Auswirkungen.

      auf einer Unix-Server im WWW.

      Sicherheitshalber solltest Du die Datei immer mit

      $fp = fopen($cfgAttachDir."/".$filepath ,"wb+");

      öffnen, wenn Du einen übertragenen Bytestream 1:1 abspeichern willst.

      OK.

      Die mit base64 codierten Daten müssen natürlich auch vorher wieder decodiert werden.

      wenn ich base64 codiere, dann werden bilder und Zips korrekt dargestellt - textdateien nicht. wenn ich nicht codiere, dann umgekehrt. woher weiß ich, wann ich kodieren muss?

      Bzw. wie kann ich das in der eMail sehen ... habs mit
      $struckture = imap_fetchstructure($mbox, $id);
      $message = imap_fetchbody($mbox,$id,$part);
      $name = $struckture->parts[$part]->dparameters[0]->value;
      $type = $struckture->parts[$part]->type;

      versucht - da kommt bei $type aber nichts gescheites raus ...

      ???? Ingo

      1. Hello,

        dann hilft nur noch ein vernünftiges Datenzustandsdiagramm, dass den Datenzustand zu jedem zeitpunkt der Datenlebensdauer kennzeichnet.

        Da muss man natürlich auch irgendwie überprüfen. Dazu musst Du Dir geeignete Dastellungen (z.B. in Hex-Code) überlegen und an den neuralgischen Punkten Kontrollausgaben einbauen. Aber vergiss nicht, dass auch der Ausgabekanal schon wieder Datenverfremdung betreiben könnte.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hi nochmal,

          ... habs jetzt über die Dateiendung realisiert, d.h. es wird geschaut, ob es sich um ein TXT(ähnliches)-Format handelt bzw. alles wa smir als binär bekannt ist, wird codiert ...

          dazu zählen Bilder, Musikdateien, *.doc, *.xls, *.pdf usw.

          Ist glaube ich zu vertreten, oder?

          Gruss, Ingo