Wiedmann wrote:In meinem Fall das Auskommentieren von
Den Apache neu gestartet und Cache im Browser geleert hast du danach schon?
Natürlich!
Wiedmann wrote:in der mime.types vorhanden sind.
Diese Datei hat mit deinem Problem nichts zu tun.
Schade, war aber mal nen Versuch wert, eben dort zu schauen, ob da nicht doch was fehlt, einstellungsmäßig mein ich.
Wiedmann wrote:So grundsätzlich:
Hast du irgendwas in der "httpd.conf" oder "php.ini" geändert (Extensions aktiviert usw.)?
Ansonsten müssten wir uns doch deinem Code zuwenden. (Insbesondere das ganze mal mit einem einfachen Testcode testen)
In der httpd.conf hab ich nüscht gemacht. In der php.ini hab ich nur output_buffering auf 4096 gestellt. Naja ok, vielleicht noch sowas wie log_errors auf On und dann auch den Pfad zur Datei. Aber nichts weltbewegendes.
Der ausschlaggebene Code zur Übergabe der Datei ist folgender:
- Code: Select all
header('Content-type: application/rtf');
header("Cache-Control: public, must-revalidate");
header("Content-Length: " . filesize($file));
header('Content-Disposition: attachment; filename="file.rtf"');
readfile($file);
Ich hab da schon alle möglichen (aus meiner Sicht) Varianten ausprobiert. Für Cache-Control halt mal public, mal no-cache. Das ganze auch mal auskommentiert, genauso wie Content-Length oder sogar den Content-type.
Trail-And-Error:1. Anzeige RTF-Code in Browser ohne vorangestellt merkwürdige Zeichen oder Abschneiden am Ende mit:
- Code: Select all
readfile($file);
2. Fehlerhaftes RTF zum Download angeboten.
- Code: Select all
header('Content-type: application/rtf');
readfile($file);
3. Anzeige korrektes RTF in Browser wie 1.
- Code: Select all
header('Content-Disposition: attachment; filename="file.rtf"');
readfile($file);
4. Feherhaftes RTF zum Download angeboten.
- Code: Select all
header('Content-type: application/rtf');
header('Content-Disposition: attachment; filename="file.rtf"');
readfile($file);
Die anderen beiden Dinge haben keinen Einfluss. Ob nun no-cache oder public. Beides kann ich auch direkt in der php.ini unter session.cache_limiter angeben. Dort steht übrigens per Default nocache drin.
Problem ist hier wohl folgendes:
- Code: Select all
header('Content-type: application/rtf');
Sobald ich das einschalte, kommt nix korrektes mehr an.
Testweise hab ich jetz einfach mal einen Link auf die fertige Datei gesetzt -> angeklickt und siehe da, sie wird korrekt angezeigt. Kein wunder, weder PHP noch der Apache haben ja jetzt daran rumgefuscht.
Ein weiterere Test bestand darin den obigen Code vollständig in eine eigene Datei zu kopieren und auszuführen. Die merkwürdigen Anfangszeichen traten nun nicht mehr auf. Auch das Ende scheint korrekt zu sein. Word fragt aber immer noch nach der Zeichenkodierung und stellt am Ende auch nur wieder den Code dar anstatt das RTF korrekt zur rendern.
Btw. nutze ich UTF-8 für die HTML-Seiten sowie meinen PHP-Quelltext. Deshalb will der das auch immer so dargestellt haben.
Gruß,
Leeloo
PS: Ich könnte dir ja mal ne korrekte und kaputte Datei zukommen lassen. Das Testfile mit den Header-Funktionen ebenfalls. Wichtig hierbei ist es halt den XAMPP zu verwenden. Denn nur hier tritt das Problem auf. Mein Apache2 unter Suse zickt jedenfalls dabei nicht rum.