medi: Downloaddialog statt Öffnen einer php Datei

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

  1. 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

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. 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.

      1. 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

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
        1. 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?

          1. 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

            --
            "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
            1. 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.

              1. 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

                --
                "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                1. 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.

                  1. 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

                    --
                    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                    1. 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.

                      1. 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

                        --
                        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                        1. 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.

                          1. 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

                            --
                            "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                            1. 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  
                              
                              
                              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

                                --
                                "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                                1. 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.

                                  1. 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-alive

                                    HTTP/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

                                    --
                                    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                                    1. 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.

                                      1. 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

                                        --
                                        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                                        1. 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???

                                  2. 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";

              2. 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

                --
                Am Ende wird alles gut.