basi: Applikationsdateien als .txt speichern

Hi,

ich lasse den User Dateien auf den Server uploaden und speichere diese dann via php als irgendwas.txt, egal, welcher Dateityp das eigentlich ist.
Den Mimetype speichere ich in der Datenbank, ebenso die richtige Dateiendung.
Wenn die Datei wieder zum Download angefordert wird, ändere ich den mime-type und gib die .txt-Datei in readfile() an.
Das klappt auch alles ganz wunderbar.

Hier noch mal ein Auszug aus download.php:
_______________________________________________
$fileName = $NAME . $thisContent->getFileType();
$physicalName = $name . ".txt";
$individuelMimeType = $thisContent->getMimeType();

header("Content-Type: $individuelMimeType NAME=$NAME\n");
header("Content-Disposition: attachment; filename=$fileName\n";
readfile("pfad/". $physicalName);
_______________________________________________

Also alles gut, dachte ich mir.
Dann wurde der Server neu aufgesetzt und alle .txt-Dateien, die zu einer Applikation gehörten, waren kaputt (in diesem Fall waren es Word- und PDF-Dateien). Dabei waren auch zwei .php Dateien, die nicht beschädigt waren.
Da ich den Server nicht neu aufgesetzt habe, kann ich nicht sagen, ob es einfach nur ein einmaliger Fehler dabei war, oder, ob diese Dateien - als .txt gespeichert - tatsächlich nicht gebackuped oder so werden können, ohne Schaden zu nehmen.

Hat jemand Erfahrungen damit gemacht?
Jede Info kann mir bei der Suche nach einer Erklärung helfen.
Danke im Voraus.
Gruß, basi

  1. Hallo Basi,

    ja, ja, diese Zeilenumbrüche - wenn du wüsstest, wie viele Nerven die mich schon gekostet haben...

    ich lasse den User Dateien auf den Server uploaden und speichere diese dann via php als irgendwas.txt, egal, welcher Dateityp das eigentlich ist.

    [...]

    Dann wurde der Server neu aufgesetzt und alle .txt-Dateien, die zu einer Applikation gehörten, waren kaputt (in diesem Fall waren es Word- und PDF-Dateien). Dabei waren auch zwei .php Dateien, die nicht beschädigt waren.

    Ich werde wahrscheinlich nie verstehen warum, aber jedenfalls kann sich die Welt auf kein einheitliches Zeichen für Zeilenumbrüche in Textdateien einigen. Auf unterschiedlichen Systemen werden Textdateien daher mit unterschiedlichen Repräsentationen für Zeilenumbrüche gespeichert - manche sind ein Byte lang, andere zwei Bytes, die meisten sind aus den Bytes #13 und/oder #10 zusammengesetzt, aber manche sind dann wieder ganz anders. Beim Kopieren von Textdateien auf ein anderes System müssen die Zeilenumbrüche daher immer "mitübersetzt" werden. Wahrscheinlich war das auch der Fall beim Neuaufsetzen des Servers, wo die Dateien wohl irgendwo zwischengespeichert wurden.

    Bei Binärdateien wie .doc oder .pdf dürfen Zeilenumbruch-Zeichen aber natürlich nicht verändert werden, weil diese von den Implementierungen des Dateityps selbst verwaltet werden und bei #13 oder #10 Bytes zu erwarten ist, dass sie etwas anderes als Zeilenumbrüche darstellen können - zum Beispiel wichtige Steuerzeichen, die beim Verändern dann kaputt gehen würden. Normalerweise wird das beim Kopieren anhand des Dateityps automatisch erkannt und nur Textdateien werden "nachkorrigiert". Da du aber so tust, als ob deine Dateien alle Textdateien wären, werden aber natürlich auch alle Dateien "nachkorrigiert" und vermeindliche Zeilenumbruchzeichen angepasst. Du solltest IMHO also entweder alle Dateien mit der tatsächlichen Dateiendung speichern oder alle Dateien als Binaerdateien auszeichnen. Ich bin mir allerdings auch nicht ganz sicher, welche dieser beiden Möglichkeiten die bessere ist.

    Viel Erfolg,
    Robert

    1. »»oder alle Dateien als Binaerdateien auszeichnen. Ich bin mir
      »»allerdings auch nicht ganz sicher, welche dieser beiden
      »»Möglichkeiten die bessere ist.

      Viel Erfolg,
      Robert

      Hi Robert,

      vielen Dank für die Info. Daran hätte ich nie gedacht. Ich teste es mal aus, müsste dafür aber wissen, wie ich die Dateien als Binaedateien kennzeichne.

      Gruß, basi

      1. Beim Suchen im Netz habe ich folgendes gefunden:
        Quelle: www.mathworks.de/r12products/instrument/demos.shtml
        _________________________

        Bevor wir das Bild anzeigen können, müssen wir die Daten zuerst als Binärdatei speichern und sie danach erneut als Bitmap nach MATLAB einlesen.

        fid = fopen('screen.bmp','w');
        fwrite(fid, out, 'uint8');
        fclose(fid);
        image_data = imread('screen.bmp','bmp');

        ______________________________

        Das Beispiel ist halt ne .bmp

        Ich muss also theoretisch eine Textdatei öffnen, dann die Orignaldatei mit dem Parameter 'uint8' einlesen und habe dann die Binärdatei?

        Gruß, basi