Downloaddialog statt Öffnen einer php Datei
medi
- php
Hallo,
ja das Thema ist etwas unglücklich gewählt - weiß auch nicht wirklich wie ich es anders sagen soll.
Problem ist Folgendes:
Eine komplexe Homepage wird aus diversen php's generiert, also jede Seite ist eine andere php Datei.
Nun ist leider das Problem, dass es ab und an vorkommt, dass sich der Downloaddialog des Browsers öffnet, und er gern die .php speichern will, anstatt diese zu öffnen.
Kann man das unterbinden? Ich meine die .php ansich kann nicht gespeichert werden, aber es nervt.
Ich hoffe ihr versteht mein Problem.
MFG
medi
Hi!
ja das Thema ist etwas unglücklich gewählt
Nein, es ist sogar so gut gewählt, dass Du es besser an google verfüttert hättest.
Sehr viele dieser potentiellen Treffer führen Dich direkt in das Archiv dieses Forums.
off:PP
Ich suche seid über einer h nach einer Antwort im Netz, und hab nix gefunden. Jedenfalls ist mir nichts ins Auge gefallen...
Ich möchte nur wissen, woran es liegt, wieso der Browser eine php Datei speichern möchte, anstatt sie gleich zu öffnen. Das muss man doch unterbinden können.
Die Themen die ich gefunden habe, sind das genaue Gegenteil von dem, da soll ja der Download erzwungen werden, ich will den ja verhindern.
Hi!
Ich möchte nur wissen, woran es liegt, wieso der Browser eine php Datei speichern möchte, anstatt sie gleich zu öffnen. Das muss man doch unterbinden können.
Das kann verschiedene Gründe haben.
Wie sieht Deine Server-Konfiguration aus?
Welchen Webserver verwendest Du?
Ist dieser im lokalen Netz, auf Deinem localhost im Internet...?
Wenn andere PHP-Dateien (auf selbigem Server) korrekt geparst werden, könnte es daran liegen, dass ein falscher Content-Type gesendet wird.
Das ist aber nur geraten - magst du den Code einer Deiner problematischen PHP-Datei oder Teile, die Du für relevant hälst hier mal vorstellen?
off:PP
Die Seite liegt auf nem Server und wird halt dort generiert.
Worauf muss ich denn bei der Server-Config achten?
Es gibt eine zentrale php die das Grundgerüst enthält. Die eigentlichen Inhalts php's includieren diese zentrale php.
Hier mal der Header der zentralen php:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="300">
<meta http-equiv="cache-control" content="private">
<meta name="robots" content="noindex, nofollow, noarchive">
<meta name="MSSmartTagsPreventParsing" content="true">
Hilft dir das weiter?
Hi!
Hier mal der Header der zentralen php:
Ich meinte nicht die Inhalte des HTML-heads, sondern die gesendeten HTTP-Header-Zeilen.
Ich frage mal vorsichtig: sagt Dir HTTP-Header etwas?
Hilft dir das weiter?
Mir soll das nicht helfen, sondern Dir;)
off:PP
Und wo bekomme ich die gesendeten Header Zeilen her?
In den php's an sich wird nirgends nen header() geschrieben, da sie ja alle den <head> der zentralen php haben. Also steh grad auf dem Schlauch und weiß nicht was du meinst.
Hi!
Und wo bekomme ich die gesendeten Header Zeilen her?
Vom Webserver - eine Http-Nachricht sieht so aus (bildlich):
[http-header1]
[http-header2]
[...]
[http-headerN]
[Payload]
Payload ist z.B: ein HTML- Dokument (oder CSS, oder XML, oder whatever)
Also steh grad auf dem Schlauch
Also ich habe grad ein wenig Zeit: holen wir dich da runter;)
Was ist mit meinen anderen Fragen?
Z.B: bezgl. des Webservers?
off:PP
hehe,
ja gut, aber wo stehen diese Nachrichten? In einer Log oder wie?
Ich bin in der Hinsicht unbeholfen, da ich gerade das erste Mal damit in Kontakt komme.
Ich habe auch nicht weiter Zugriff auf den Server, kann also nix an der Config etc ändern.
Hi!
ja gut, aber wo stehen diese Nachrichten? In einer Log oder wie?
Mit Nachricht meinte ich das, was der Web-Server sendet: header+inhalt
Ich bin in der Hinsicht unbeholfen, da ich gerade das erste Mal damit in Kontakt komme.
Womit jetzt genau, PHP?
Ich habe auch nicht weiter Zugriff auf den Server, kann also nix an der Config etc ändern.
Du benutzt einen Server Deines Providers?
Kannst du vielleicht eine URI, eines Deiner Problemfälle posten?
off:PP
Mit Nachricht meinte ich das, was der Web-Server sendet: header+inhalt
Du meinst also den Seitenquelltext?
Womit jetzt genau, PHP?
Nein, mit deinen HTTP Nachrichten.
Du benutzt einen Server Deines Providers?
Nein, der Server ist unabhängig.
Kannst du vielleicht eine URI, eines Deiner Problemfälle posten?
Würde dir nichts nützen, da per htaccess geschützt.
Und es gibt keine speziellen Problemfälle. Mal ist es diese php, mal eine andere. Und da alle diese php's die zentrale php includen, denke ich das da der Fehler sein muss. Und den header von dieser habe ich dir ja schon gepostet.
Hi!
Mit Nachricht meinte ich das, was der Web-Server sendet: header+inhalt
Du meinst also den Seitenquelltext?
Http-Header + 'Seitenquelltext' (in dieser Reihenfolge)
Womit jetzt genau, PHP?
Nein, mit deinen HTTP Nachrichten.
Das sind nicht meine - sondern: TBLs ;)
Du benutzt einen Server Deines Providers?
Nein, der Server ist unabhängig.
Was heißt denn das?
Kannst du vielleicht eine URI, eines Deiner Problemfälle posten?
Würde dir nichts nützen, da per htaccess geschützt.
Das stimmt!
Oder: du teilst mir die Credentials mit, wovon ich aber abrate;)
Und es gibt keine speziellen Problemfälle. Mal ist es diese php, mal eine andere. Und da alle diese php's die zentrale php includen, denke ich das da der Fehler sein muss. Und den header von dieser habe ich dir ja schon gepostet.
Das waren keine Header, sondern der Inhalt des HTML-heads.
off:PP
Mit Nachricht meinte ich das, was der Web-Server sendet: header+inhalt
Ja, aber schlauer bin ich immer noch nicht. Langsam komm ich mir blond vor -.-
Ich würde dir ja den Header geben, aber wo steht der? Gib mir mal bitte ein Bsp, damit ich vom Schlauch runterkomme.
Hi!
Mit Nachricht meinte ich das, was der Web-Server sendet: header+inhalt
Ja, aber schlauer bin ich immer noch nicht. Langsam komm ich mir blond
Die Haarfarbe eines Entwicklers hat für die Erstellung von Software null relevanz;)
Ich würde dir ja den Header geben, aber wo steht der?
Dein (Web-) Client bekommt diese Header als erstes geliefert - dann kommt der 'Inhalt'.
Hast Du Firefox? Dann kanst Du dieses Addon verwenden, um die HTTP-Header anzuzeigen.
Du kannst auch per Telnet-Client eine Verbindung zu deinem Server herstellen und dann händisch mit /GET $resource diese anfordern und erhälst als erstes die Http-header.
Wenn Du einen Sniffer hast, kann dieser die Kommunikation mit dem Server analysieren und zeigt auch die Header.
Gib mir mal bitte ein Bsp,
Für was?
damit ich vom Schlauch runterkomme.
so langsam glaube ich, dass _ich_ darauf stehe..
off:PP
OK, hier mal der Header - hoffe ma das is das was du möchtest.
GET /index.php HTTP/1.1
Host: ...
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.x 200 OK
Date: Sat, 16 Aug 2008 15:23:25 GMT
Server: Apache/2.2.3 (Linux/SUSE)
X-Powered-By: PHP/5.2.0
Expires: 300
Cache-Control: private
Pragma: No-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 7032
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
Hi!
OK, hier mal der Header
_Die_ Header sind's unter anderem.
hoffe ma das is das was du möchtest.
Ja das meinte ich!
Sieht aber ok aus - kam nach dem HTTP-Geraffel noch etwas, z.B: Html?
off:PP
Sieht aber ok aus - kam nach dem HTTP-Geraffel noch etwas, z.B: Html?
nö, das is alles was das Addon aufgeführt hat.
Evtl tritt der Fehler auch mit meiner download.php auf - zmd kann ich diesen Fehler nur so reproduzieren, aber halt auch nicht immer.
Headers der download.php
GET /download.php?id=8210 HTTP/1.1
Host: ...
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.x 200 OK
Date: Sat, 16 Aug 2008 15:39:23 GMT
Server: Apache/2.2.3 (Linux/SUSE)
X-Powered-By: PHP/5.2.0
Expires: 0
Cache-Control: post-check=0, pre-check=0, must-revalidate
Pragma: private
Content-Transfer-Encoding: binary
content-disposition: attachment; filename="test.pdf"
Content-Length: 488925
Keep-Alive: timeout=15, max=94
Connection: Keep-Alive
Content-Type: application/unknown
----------------------------------------------------------
Und das die Header der Seite die ich daraufhin öffnen wollte, also wo der Downloaddialog der php erschien:
GET /index.php HTTP/1.1
Host: ...
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.x 200 OK
Und da is dann Schluss - der Rest steht dann in der PHP, wenn man diese herunterlädt und öffnet.
Hi!
Und das die Header der Seite die ich daraufhin öffnen wollte, also wo der Downloaddialog der php erschien:
Jetzt wird es interessant:
GET /index.php HTTP/1.1
Host: ...
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-aliveHTTP/1.x 200 OK[/code]
Der Web-Server sendet keinen 'Content-Type', der Browser kann den Inhalt der Nachricht also nicht entsprechend behandeln und bietet den Download-Dialog.
Ist dieser Web-Server in einem Firmen-Netz, oder öffentlich zugänglich?
off:PP
Nein, der Server steht allein, also ist in keinem Netzwerkverbund, naja wie es halt bei Strato und Konsorten ist. Weiß ja nicht wie die das handhaben.
Zmd läuft die Seite nur auf diesem einen Server. Und eigentlich sollte der Content-Type ja durch die includierte php mitgegeben werden.
Hi!
Nein, der Server steht allein, also ist in keinem Netzwerkverbund, naja wie es halt bei Strato und Konsorten ist.
Dann steht Dein Server _definitv_ in einem Netzwerk, öffentlich zugänglicher Web-Server _bei einem Provider_.
Uff!
Weiß ja nicht wie die das handhaben.
naja..
Und eigentlich sollte der Content-Type ja durch die includierte php mitgegeben werden.
Wieso includiert jetzt?
Wenn du in PHP per header() den Content-Type nicht setzst, dann liefert PHP: 'Content-Type: text/html' - in Deinem Fall aber nicht!
Hast Du mal beim Provider nachgefragt?
off:PP
Ich hatte doch geschrieben, dass es eine zentrale php fürs Grundgerüst gibt, welche in alle anderen per include eingebunden wird.
In dieser zentralen php wird auch per:
header("Content-Type: text/html; charset=iso-8859-1");
der Content Type gesetzt.
Was soll ich den denn da fragen???
echo $begrüßung;
Und das die Header der Seite die ich daraufhin öffnen wollte, also wo der Downloaddialog der php erschien:
GET /index.php HTTP/1.1
Host: ...
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Das ist der Request und für die Lösung deines Problems nicht weiter relevant. Es reicht, wenn du
GET /index.php HTTP/1.1
zitierst.
HTTP/1.x 200 OK[/code]
Und da is dann Schluss - der Rest steht dann in der PHP, wenn man diese herunterlädt und öffnet.
Wenn keine weitere Headerzeile mehr kommt, statt dessen alle Header im Content (Payload) stehen, dann hast du irgendwo eine Trennung zwischen Header und Content eingebaut. Jede Headerzeile ist für sich mit einem \r\n abgeschlossen. Das Ende der Header kennzeichnet eine Leerzeile, also das abschließende \r\n von der Zeile vorher, gefolgt von \r\n. Alles folgende wird als Content angesehen. Finde den Verursacher der Leerzeile.
echo "$verabschiedung $name";
Hi,
Und wo bekomme ich die gesendeten Header Zeilen her?
eine einfache Möglichkeit wären die Firefox-Erweiterungen Firebug oder LiveHttpHeaders, für IE leistet Fiddler ganz gute Dienste.
Gruesse, Joachim