"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

PHP: File upload an IE über HTTPS

FMFlash 26.01.2005 - 16:52 633 6
Posts

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Folgende Situation:
Ein php Skript generiert eine Datei (.csv textfile), nur im Speicher, setzt anschließend die header und gibt es an den client aus:

Code: PHP
	header("Content-Type: text/plain");
	header("Content-Length: ".strlen($file['contents']));
	header("Content-Disposition: attachment; filename=\"".$file['dlfilename']."\""); 
	print $file['contents'];

Das Skript liegt im HTTPS Bereich eines Apache Servers. Verwende ich Firefox (genauer gesagt "nicht den IE") funktioniert alles bestens: Der "speichern unter..." Dialog poppt auf, Dateiname passt, direkt in Excel öffnen kein Problem.

Nur MUSS es mit dem IE auch funktionieren, aber alles was ich von dem bekomme ist ein "xxx.php konnte nicht geöffnet werden" und weder "öffnen" noch "speichern" funktioniert.

Kennt zufällig jemand einen Workaround für dieses schwerwiegende Problem?

Edit: Seltsamerweise lösen sich die Probleme immer ziemlich schnell auf nachdem ich mich erstmal dazu entschlossen habe hier zu posten. :p

Die Lösung:
Folgende header müssen noch dazugefügt werden damits der IE auch wirklich kapiert:
Code: PHP
 	header("Pragma: public");
	header("Cache-Control: max-age=0"); 
Bearbeitet von FMFlash am 26.01.2005, 17:06

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4422
Reine Neugier: hast du eine Session verwende, spricht session_start() bevor du das File anbietest?

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Natürlich nicht. Die header kann man schließlich nur einmal setzen.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Hast du geschaut, ob dadurch noch irgendwelche anderen Header beeinflusst werden. Das ist ja total bescheuert! Was haben die Cache-Einstellungen damit zu tun, ob der IE das speichern kann oder nicht? Ok, es wäre nicht das erste Mal, dass sich der IE bescheuert verhält.

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4422
Hmn, naja. Ich kenn das Problem u.A. mit Sessions, darum hab ich gefragt. Die default Parameter bei sessions schicken Header mit, die den IE verhindern, Inhalte zu Cachen (oder so ...?), ich bin zu faul es jetzt genau zu analysieren. Beruehmtes Beispiel sind POST requests, im browser auf back -> *bam*. Und ich hab was im Hinterkopf dass der IE mit den Session einstellungen Files nicht im Cache ablegt und dadurch sie nicht fuer den "save as" dialog anbieten kann .. aber hier duerft das eh nicht zutreffen, aber aehnliche Probleme bei HTTPS mit sich bringen (Security-Feature)?

Ich hab ganz sicher dazu Eintraege in der msdn mal gesehen.

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von Ringding
Hast du geschaut, ob dadurch noch irgendwelche anderen Header beeinflusst werden.

Das einzige was beeinflusst wird ist der no-cache header den php üblicherweise automatisch einfügt. Dieser wird durch das Pragma: public setting quasi ersetzt.

Zitat von Ringding
Das ist ja total bescheuert! Was haben die Cache-Einstellungen damit zu tun, ob der IE das speichern kann oder nicht?

Da HTTPS sowieso nie gecached wird seh ich auch keinen logischen Zusammenhang, aber offensichtlich muss man dem IE immer wieder mit Prügeln beibringen was er zu tun hat.

Zitat von Ringding
Ok, es wäre nicht das erste Mal, dass sich der IE bescheuert verhält.

Wem sagst du das .... :o


PS: In normaler HTTP Umgebung funktioniert es auch ohne diesen "Workaround".

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Rektal
Hmn, naja. Ich kenn das Problem u.A. mit Sessions, darum hab ich gefragt. Die default Parameter bei sessions schicken Header mit, die den IE verhindern, Inhalte zu Cachen (oder so ...?), ich bin zu faul es jetzt genau zu analysieren. Beruehmtes Beispiel sind POST requests, im browser auf back -> *bam*. Und ich hab was im Hinterkopf dass der IE mit den Session einstellungen Files nicht im Cache ablegt und dadurch sie nicht fuer den "save as" dialog anbieten kann .. aber hier duerft das eh nicht zutreffen, aber aehnliche Probleme bei HTTPS mit sich bringen (Security-Feature)?

Ich hab ganz sicher dazu Eintraege in der msdn mal gesehen.
es könnte aber natürlich auch so sein, dass php in der art eingerichtest ist, dass automatisch eine session eröffnet wird ;)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz