fastix®: Lynx (eigentlich auch Barrierefreiheit)

Ich stricke gerade eine Community...

Erste Versuche mit Lynx haben ergeben, daß das, was ich sehe zwar gut aussieht, aber eine Weiterleitung

via:

<?php header("Location: plapla");?>

nicht unterstützt wird. Die ist aber an einigen Stellen nunmal notwendig und gewünscht.

Meine Frage an das Fachpublikum:

Javascript geht nicht, header() geht nicht... wie gehts, wie mache ich es richtig?

fastix®

  1. Moin!

    Erste Versuche mit Lynx haben ergeben, daß das, was ich sehe zwar gut aussieht, aber eine Weiterleitung

    via:

    <?php header("Location: plapla");?>

    nicht unterstützt wird. Die ist aber an einigen Stellen nunmal notwendig und gewünscht.

    Halte dich an den HTTP-Standard! Weiterleitungen erfordern die KOMPLETTE URL, nicht nur eine relative. Also schön bei "http://..." beginnen.

    Die notwendigen Angaben stehen dynamisch in diversen Variablen in $_SERVER drin, beispielsweise in $_SERVER['HTTP_HOST'].

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Moin!

      Halte dich an den HTTP-Standard! Weiterleitungen erfordern die KOMPLETTE URL, nicht nur eine relative. Also schön bei "http://..." beginnen.

      Hallo Sven!

      Das ist es ja gerade... ich halte mich dran und trotzdem funzt es nicht. Allerdings verwende ich eine URI, also sowas:

      "http://community.fastix.de/index.php?UID=plaplaplapla"

      Geht eigentlich auch:

      <meta http-equiv="refresh" content="5; URL=http://selfhtml.teamone.de/">

      naja.. das kann ich wohl selbst testen.

      Es sei denn jemand hat konkrete Informationen.

      fastix®

      1. Danke! Das Problem ist gelöst!

        Ich hatte doch tatsächlich an einer Stelle gar nicht auf die Funktion verwiesen.... und die war natürlich ganz vorne dran...

        Lynx tut es mit header("Location: URI");

        fastix®

        Hier folgt die ultimative Weiterleitung mit allen Browsern unter allen Umständen -Lösung:

        <?php

        function ganz_sichere_Loesung($servername,$serverdir,$zieldatei)
        {
            $mylocation=$servername.$serverdir.$zieldatei;
            header("Location: $mylocation");
            echo "<html>\n";
            echo " <head>\n";
            echo "  <meta http-equiv="refresh" content="0; URL=$mylocation">\n";
            echo " </head>\n";
            echo " <script type="text/javascript">";
            echo "   this.location.href="$mylocation";";
            echo "  </script>";
            echo " <head>\n";
            echo " <body>\n";
            echo "  <h1>Automatische Weiterleitung</h1>\n";
            echo "  <p>Falls Ihr Browser die automatische Weiterleitung nicht unterstützt, verwenden Sie bitte den folgenden Link:</p>\n";
            echo "  <p><a href="$mylocation">Weiter zu: $mylocation</a></p>\n";
            echo " </body>\n";
            echo "</html>\n";
            die();
        }

        fastix®

        1. Moin!

          Hier folgt die ultimative Weiterleitung mit allen Browsern unter allen Umständen -Lösung:

          Die will ich natürlich noch kommentieren:

          <?php

          function ganz_sichere_Loesung($servername,$serverdir,$zieldatei)
          {
              $mylocation=$servername.$serverdir.$zieldatei;

          Warum hier nicht für diverse Informationen auf $_SERVER zurückgreifen? Die PHP-Doku selbst schlägt diese Vorgehensweise vor, um relative URLs zu verwenden:

          header("Location: http://".$_SERVER['HTTP_HOST']
                                .dirname($_SERVER['PHP_SELF'])
                                ."/".$relative_url);

          header("Location: $mylocation");

          Wenn du header verwendest, kriegst du unter Umständen bei bereits gesendeten Headern einen PHP-Fehler. Prüfe mit der Funktion headers_sent() vorher, ob du noch header() verwenden darfst.

          Alternativ (wenn Header schon weg sind), kannst du versuchen, mit deiner HTML-Lösung was zu retten. Bedenke aber, dass <meta> nur in den <head> darf, und Javascript nicht überall funktioniert.

          echo "<html>\n";
              echo " <head>\n";
              echo "  <meta http-equiv="refresh" content="0; URL=$mylocation">\n";
              echo " </head>\n";
              echo " <script type="text/javascript">";
              echo "   this.location.href="$mylocation";";
              echo "  </script>";
              echo " <head>\n";
              echo " <body>\n";
              echo "  <h1>Automatische Weiterleitung</h1>\n";
              echo "  <p>Falls Ihr Browser die automatische Weiterleitung nicht unterstützt, verwenden Sie bitte den folgenden Link:</p>\n";
              echo "  <p><a href="$mylocation">Weiter zu: $mylocation</a></p>\n";
              echo " </body>\n";
              echo "</html>\n";
              die();

          Warum hier mit die() beenden? Warum nicht exit?

          }

          - Sven Rautenberg

          --
          ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
          1. Moin!

            Hallo!

            Warum hier nicht für diverse Informationen auf $_SERVER zurückgreifen?

            Ich hab den Server ($server) sowieso in der Konfiguration stehen. Es gibt für das Projekt "Community" eine config.php, die includet wird um etliche Variablen zu setzen. Wegen der Wiederverwendbarkeit... Ich will die Community, wenn Sie fertig und hinreichend bugfrei ist auch mal löblich zum Download freigeben.

            Wenn du header verwendest, kriegst du unter Umständen bei bereits gesendeten Headern einen PHP-Fehler. Prüfe mit der Funktion headers_sent() vorher, ob du noch header() verwenden darfst.

            Das ist allerdings eine gute Idee.

            Warum hier mit die() beenden? Warum nicht exit?

            Tja. Ich könnte auch exit() nehmen. Aber stirb() klingt so romantisch und ich denke der Performance- Unterschied ist marginal :)

            fastix®

          2. Holladiewaldfee,

            Wenn du header verwendest, kriegst du unter Umständen bei bereits gesendeten Headern einen PHP-Fehler. Prüfe mit der Funktion headers_sent() vorher, ob du noch header() verwenden darfst.

            Häh?
            Wieso? Er kann doch Header versenden soviel er will. Wenn ich mich recht erinnere verschickt PHP die Header erst, wenn die erste Nicht-Header-Ausgabe erfolgt, bei aktiviertem Output-Buffering sogar erst noch später. Und wenn bereits ein Location-Header oder ähnliches zur Ausgabe vorbereitet wurde wird dieser wenn header() nicht mit dem entsprechenden Parameter aufgerufen wird doch ersetzt.

            headers_sent() bringt ihm hier glaube ich gar nix. Damit kann er nur rausfinden, ob bereits anderer Krempel geschickt wurde und er damit nichts mehr an den Headern ändern kann. Ob PHP aber bereits ein paar eigene Header vorbereitet hat, bekommt er damit aber nicht raus.

            Vielleicht hab ich Dich aber auch nur falsch verstanden und Du willst ihm das sagen, was ich grade zu sagen versucht habe ;-)

            Ciao,

            Harry

            --
              Man weiß erst was man hatte, wenn man es verloren hat.
              Intelligenz ist nicht zwingend etwas positives.
            1. Moin!

              headers_sent() bringt ihm hier glaube ich gar nix. Damit kann er nur rausfinden, ob bereits anderer Krempel geschickt wurde und er damit nichts mehr an den Headern ändern kann. Ob PHP aber bereits ein paar eigene Header vorbereitet hat, bekommt er damit aber nicht raus.

              Vielleicht hab ich Dich aber auch nur falsch verstanden und Du willst ihm das sagen, was ich grade zu sagen versucht habe ;-)

              Genau das wollte ich sagen. Es ist mitunter problematisch, einfach ohne Kenntnis von "voriger Ausgabe" mit header() zu arbeiten. Besser, man fragt, ob das noch geht: headers_sent().

              - Sven Rautenberg

              --
              ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|