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