jürgen: weiterleitung header("datei.php"); alternativer befehl

Hallo,
gibt es zur Weiterleitung in php Anstatt mit
 header ("datei.php")
einen alternativen Befehl?
danke jürgen

  1. Hi,

    gibt es zur Weiterleitung in php Anstatt mit
    header ("datei.php")

    falls Du header("Location: datei.php") meinst: Der Location-Header muss

    *** ZWINGEND ***

    eine

    *** ABSOLUTE ***

    URL enthalten. Eine relative ist strikt verboten.

    einen alternativen Befehl?

    Warum?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. falls Du header("Location: datei.php") meinst: Der Location-Header muss

      *** ZWINGEND ***

      eine

      *** ABSOLUTE ***

      URL enthalten. Eine relative ist strikt verboten.

      Richtig.

      "Ja aber es funktioniert doch" :)

      PHP frisst leider auch relative Pfade und wirft dabei nichtmal ein Warning aus. Die meisten Browser sind damit auch total glücklich - mir ist kein Browser bekannt, der damit nicht klar kommt.

      Was mich allerdings verwirrt: Content-Location erlaubt relative und absolute URIs, Location hingegen nicht.

      1. Moin Moin!

        Richtig.

        "Ja aber es funktioniert doch" :)

        PHP frisst leider auch relative Pfade und wirft dabei nichtmal ein Warning aus. Die meisten Browser sind damit auch total glücklich - mir ist kein Browser bekannt, der damit nicht klar kommt.

        Spezifikation trifft Realität.

        Auch sinngemäß aus den RFCs: Halte Dich strikt an die Regeln bei allem was Du sendest, und sei sehr entspannt bei allem, was Du empfängst.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
      2. Hallo

        Richtig.

        "Ja aber es funktioniert doch" :)

        PHP frisst leider auch relative Pfade und wirft dabei nichtmal ein Warning aus.

        Warum sollte es auch? Wie oft predigen wir hier, dass eine mit PHP* erzeugte Ausgabe den Regeln des Ausgabemediums folgen muss und PHP außer mit der Stringerstellung dabei nichts zu tun hat? Hier wird halt nur eine Zeichenkette für das Senden eines HTTP-Headers erzeugt und übergeben. Für PHP ist es egal, was da drin steht, wichtig wird das erst bei der Verarbeitung im dafür vorgesehenen Kontext (hier HTTP(-Header)).

        * ... oder auch einer anderen Programmiersprache ...

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        Veranstaltungsdatenbank Vdb 0.3
        1. Für PHP ist es egal, was da drin steht, wichtig wird das erst bei der Verarbeitung im dafür vorgesehenen Kontext (hier HTTP(-Header)).

          Nein, PHP ist das nicht egal:
          "Cannot add header information - headers already sent" ist wohl die klassische Meldung in diesem Kontext.

          Wenn es PHP egal wäre, würde es einfach "LOCATION: http://example.com/foo/bar.baz" an die Standardausgabe senden und gut wäre. Stattdessen wird man aber freundlicherweise auf einen Fehler hingewiesen - das könnte man bei anderen bekannten Fehlern auch machen.

          1. Hallo,

            »» Für PHP ist es egal, was da drin steht, wichtig wird das erst bei der Verarbeitung im dafür vorgesehenen Kontext (hier HTTP(-Header)).
            Nein, PHP ist das nicht egal:
            "Cannot add header information - headers already sent" ist wohl die klassische Meldung in diesem Kontext.

            das ist der eine Punkt - der andere ist der, dass der Text "Location: ..." ja nicht nur als Header weitergereicht wird, sondern auch noch der HTTP-Status auf 302 geändert wird, sobald man einen Location-Header setzt (obwohl 301 oft angebrachter wäre).

            Wenn es PHP egal wäre, würde es einfach "LOCATION: http://example.com/foo/bar.baz" an die Standardausgabe senden und gut wäre.

            Ja. Dann könnte man aber auch ganz auf die Funktion header() verzichten und sämtliche Header per print oder echo raushauen, müsste dann aber auch darauf achten, vor dem eigentlichen Content eine Leerzeile auszugeben. Zu viele neue Fehlerquellen ...

            Stattdessen wird man aber freundlicherweise auf einen Fehler hingewiesen - das könnte man bei anderen bekannten Fehlern auch machen.

            Macht man ja auch - denke nur an Array-Indexe, die irrtümlich als benannte Konstanten notiert sind, wo PHP gnädigerweise eine Notice ausgibt und sie dann als String interpretiert. Oder Zugriffe auf nicht existierende Variablen.
            Ich finde, wenn man die vorhandenen Reporting-Möglichkeiten nutzt, bekommt man schon einiges an "freundlichen Hinweisen" bei typischen Fehlern.

            So long,
             Martin

            --
            Das einzige Problem beim Nichtstun: Man weiß nie, wann man damit fertig ist.
            1. Ich finde, wenn man die vorhandenen Reporting-Möglichkeiten nutzt, bekommt man schon einiges an "freundlichen Hinweisen" bei typischen Fehlern.

              richtig, aber wenn ich header('LOCATION: foo.php'); aufrufe, bekomme ich keine hinweis - lässt sich das ggf. irgendwo doch einschalten?

              1. Hallo,

                »» Ich finde, wenn man die vorhandenen Reporting-Möglichkeiten nutzt, bekommt man schon einiges an "freundlichen Hinweisen" bei typischen Fehlern.
                richtig, aber wenn ich header('LOCATION: foo.php'); aufrufe, bekomme ich keine hinweis - lässt sich das ggf. irgendwo doch einschalten?

                nein, wie Auge schon anmerkte, wird nur überprüft, ob in der augenblicklichen Situation überhaupt Header gesendet werden können, nicht aber, ob deren Schlüssel und Werte korrekt oder gar plausibel sind. Der Location-Header ist insofern eine Ausnahme, als er "nebenbei" noch zu einem geänderten HTTP-Status führt.

                Offenbar hast du Auge missverstanden, und ich bin mit eingestiegen: Es ging ihm darum, dass PHP sich nicht um die Bedeutung der Header schert, sondern nur darum, dass sie übermittelt werden. Wir haben uns dagegen anhand eines Beispiels auf den Inhalt gestürzt ...

                Ein unsinniger oder falscher Header ist eben kein Fehler aus der Sicht von PHP, und erzeugt somit auch keine Meldung. Ließe man die Kommunikation über einen HTTP-Analyzer laufen, sollte der allerdings einen Fehler melden. Das wäre sein Ressort.

                So long,
                 Martin

                --
                Mit einem freundlichen Wort und einer Waffe erreicht man mehr, als mit einem freundlichen Wort allein.
                  (Al Capone, amerikanische Gangsterlegende)
                1. Hallo

                  Offenbar hast du Auge missverstanden, und ich bin mit eingestiegen: Es ging ihm darum, dass PHP sich nicht um die Bedeutung der Header schert, sondern nur darum, dass sie übermittelt werden. ...

                  So war das gemeint.

                  Ein unsinniger oder falscher Header ist eben kein Fehler aus der Sicht von PHP, und erzeugt somit auch keine Meldung. Ließe man die Kommunikation über einen HTTP-Analyzer laufen, sollte der allerdings einen Fehler melden. Das wäre sein Ressort.

                  Wohin sollte dann die Meldung gehen? Das PHP-Skript ist dann fertig (oder irre ich mich da? Nö, oder?). "Vor dem Browser" sitzt ein wegen der Meldung verdutzter Benutzer. Der Server zuckt mit den Schultern und die Meldung landet im Nirwana.

                  Aber irgendwer sollte eine Meldung bekommen und damit auch etwas anfangen (können).

                  Tschö, Auge

                  --
                  Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                  Terry Pratchett, "Wachen! Wachen!"
                  Veranstaltungsdatenbank Vdb 0.3
                  1. Hi,

                    »» Ein unsinniger oder falscher Header ist eben kein Fehler aus der Sicht von PHP, und erzeugt somit auch keine Meldung. Ließe man die Kommunikation über einen HTTP-Analyzer laufen, sollte der allerdings einen Fehler melden. Das wäre sein Ressort.
                    Wohin sollte dann die Meldung gehen?

                    na wohin wohl? In eine Protokolldatei, oder in ein Live-Fenster, das ein derartiges Tool anbieten könnte.

                    Das PHP-Skript ist dann fertig (oder irre ich mich da? Nö, oder?).

                    Korrekt. Okay, vielleicht läuft es auch noch, während schon Header und Teile der Nutzantwort zum Client gesendet werden, das spielt aber keine Rolle.

                    "Vor dem Browser" sitzt ein wegen der Meldung verdutzter Benutzer. Der Server zuckt mit den Schultern und die Meldung landet im Nirwana.

                    Nein, "vor dem Browser" sitzt der Webentwickler, der kritisch auf alle Arten von Fehlermeldungen wartet.
                    Bestimmt gibt es ein Tool schon, wie ich es mir vorstelle (ich habe es einfach abstrakt HTTP-Analyzer genannt), ich kenne aber keines. Ich stelle es mir aber so vor, dass es als eine Art Proxy zwischen Browser und Server eingeschleift wird und dann den durchlaufenden HTTP-Traffic auf Korrektheit und Plausibilität überwacht.
                    Wenn's sowas noch nicht gibt, wäre es Zeit, dass jemand etwas in der Art schreibt.

                    So long,
                     Martin

                    --
                    Husten kann böse Folgen haben.
                    Besonders im Kleiderschrank.
                    1. Hallo

                      »» »» Ein unsinniger oder falscher Header ist eben kein Fehler aus der Sicht von PHP, und erzeugt somit auch keine Meldung. Ließe man die Kommunikation über einen HTTP-Analyzer laufen, sollte der allerdings einen Fehler melden. Das wäre sein Ressort.
                      »» Wohin sollte dann die Meldung gehen?

                      na wohin wohl? In eine Protokolldatei, oder in ein Live-Fenster, das ein derartiges Tool anbieten könnte.

                      Die Protokolldatei gefällt mir (sozusagen).

                      »» Das PHP-Skript ist dann fertig (oder irre ich mich da? Nö, oder?).

                      Korrekt. Okay, vielleicht läuft es auch noch, während schon Header und Teile der Nutzantwort zum Client gesendet werden, das spielt aber keine Rolle.

                      »» "Vor dem Browser" sitzt ein wegen der Meldung verdutzter Benutzer. Der Server zuckt mit den Schultern und die Meldung landet im Nirwana.

                      Nein, "vor dem Browser" sitzt der Webentwickler, der kritisch auf alle Arten von Fehlermeldungen wartet.

                      So der Idealfall. Wir wissen aber alle, was sich in der Praxis so alles darbietet.

                      Da sucht man, einen solchen (oder auch anderen Fehler gemacht habend) mit der Fehlermeldung per Suchmaschine nach einer Lösung und was findet man? Tausende andere Seiten, wo der Fehler live auftritt. Komischerweise finden sich solche Suchtreffer dann auch immer schon auf den ersten Seiten der Trefferlisten. :-)

                      Bestimmt gibt es ein Tool schon, wie ich es mir vorstelle (ich habe es einfach abstrakt HTTP-Analyzer genannt), ich kenne aber keines. Ich stelle es mir aber so vor, dass es als eine Art Proxy zwischen Browser und Server eingeschleift wird und dann den durchlaufenden HTTP-Traffic auf Korrektheit und Plausibilität überwacht.
                      Wenn's sowas noch nicht gibt, wäre es Zeit, dass jemand etwas in der Art schreibt.

                      Jou, hätte was. Gibt Live HTTP Header solche Fehlermeldungen eigentlich auch aus? Da ich selbst äußerst sparsam mit header() arbeite, habe ich speziell darauf noch nie auf geachtet.

                      Tschö, Auge

                      --
                      Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                      Terry Pratchett, "Wachen! Wachen!"
                      Veranstaltungsdatenbank Vdb 0.3
          2. Hallo

            »» Für PHP ist es egal, was da drin steht, wichtig wird das erst bei der Verarbeitung im dafür vorgesehenen Kontext (hier HTTP(-Header)).

            Nein, PHP ist das nicht egal:
            "Cannot add header information - headers already sent" ist wohl die klassische Meldung in diesem Kontext.

            ich will ja nicht Korinthen kacken, aber das ist die klassische Meldung im Kontext des Scheiterns der Ausführung der Funktion header(). Das hat nichts damit zu tun, dass der String, der als Header gesendet werden soll, nicht den Anforderungen eines Headers entspricht (z.B. eben: "Location: http://...bla.php" vs. "Location: bla.php"). Aber genau *darum* ging es mir.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
            Terry Pratchett, "Wachen! Wachen!"
            Veranstaltungsdatenbank Vdb 0.3
  2. Hi there,

    Hallo,
    gibt es zur Weiterleitung in php Anstatt mit
    header ("datei.php")
    einen alternativen Befehl?

    Was stört Dich dran? Wenn es der Umstand ist, daß Du vor dem Senden des Headers keinen wie immer gearteten Output setzen kannst, dann würde ein alternativer Befehl daran nichts änderen, der wäre den selben Restriktionen unterworfen, nicht weil es strikt verboten ist, so etwas gibt es in Programmiersprachen nicht, sondern weil es systemimmanent ist...

  3. Hallo Jürgen,

    gibt es zur Weiterleitung in php Anstatt mit
    header ("datei.php")
    einen alternativen Befehl?

    die Funktion header() arbeitet auf HTTP-Ebene und es gibt keine andere Variante auf dieser Ebene. Jedoch sind Alternativen durchaus vorhanden. Es kommt eben nur darauf an, was Du machen willst.

    Gruß aus Berlin!
    eddi

    --
    VEB Opel, Geruchsproben und Stasi 2.0, Zensur...
    IHR WOLLTET MERKEL!
  4. Hallo

    gibt es zur Weiterleitung in php Anstatt mit
    header ("datei.php")
    einen alternativen Befehl?

    Bitteschön:

    echo '<a href="datei.php">Link zu datei.php</a>';

    Tschö, Auge

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
    Terry Pratchett, "Wachen! Wachen!"
    Veranstaltungsdatenbank Vdb 0.3