Steffen: Weiterleitung per PHP

hallo!

wenn ich nach weiterleitung per php suche, bekomme ich immer wieder nur die eine selbe möglichkeit angeboten:

header("Location: %s", $LinkLocation));

problem ist, dass ich in vielen fällen, diese fehlermeldung bekomme:

"Cannot add header information - headers already sent by (output started at /html/test.php:3) in /html/test.php on line 27"

ich hab keine ahnung, wo ich schon vorher eine headerinfo ins script eingebaut habe (already sent) - ich hab aber auch eigentlich keinen nerv mir darum ewig gedanken zu machen.

meine frage ist: gibt es denn keine andere möglichkeit geben, (ohne auf einen mausklick zu warten) per php-befehl eine andere seite zu laden?

steffen

  1. Hi Steffen,

    das mit der Location ist schon O.K. so, es darf halt nur wirklich noch garnix anderes gesendet werden, also darf auch kein HTML davor stehen. Die Datei sollte sofort mit dem "<?" Ich denke selbst ein Leerzeichen wäre davor zuviel, und dann muss halt die erste AUsgabe die Location sein, keine Echo, Kein Print und keine Sessionverwaltung davor, dann klappt es auch.

    Gruss

    Marko

  2. Moin!

    wenn ich nach weiterleitung per php suche, bekomme ich immer wieder nur die eine selbe möglichkeit angeboten:

    header("Location: %s", $LinkLocation));

    problem ist, dass ich in vielen fällen, diese fehlermeldung bekomme:

    "Cannot add header information - headers already sent by (output started at /html/test.php:3) in /html/test.php on line 27"

    Die Lösung ist ganz simpel: Wenn du irgendeinen Teil der HTML-Seite ausgibst, werden die Header, die du und das System bis dahin generiert haben, ebenfalls ausgegeben. Wenn du hinterher noch header haben willst, bist zu zu spät.

    Deshalb: Die Funktion header() kannst du nur benutzen, wenn du vorher keinerlei HTML-Code ausgibst. Dazu gehören HTML-Bereiche außerhalb von <? ?>, Ausgaben mit echo() und Konsorten, von PHP generierte Fehlermeldungen (meist kriegst du eine Fehlermeldung einer fehlgeschlagenen Funktion, und danach dann die Fehlermeldung von header() - ist dann auch nicht mehr weiter schlimm) - was gerne übersehen wird: Auch die Leerzeile zu Beginn einer PHP-Datei ist böse. Sogar ein Leerzeichen ganz am Anfang darf nicht sein. Die erste Zeile einer PHP-Datei muss direkt mit <?php beginnen, und bis zur letzten Anwendung der header()-Funktion darf keinerlei Ausgabe für die HTML-Seite ausgegeben werden.

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
  3. Hi,

    wenn ich nach weiterleitung per php suche, bekomme ich immer wieder nur die eine selbe möglichkeit angeboten:

    header("Location: %s", $LinkLocation));

    weil es in php die Einzige ist.

    problem ist, dass ich in vielen fällen, diese fehlermeldung bekomme:
    "Cannot add header information - headers already sent by (output started at /html/test.php:3) in /html/test.php on line 27"

    das Warum haben die Anderen schon erläutert

    meine frage ist: gibt es denn keine andere möglichkeit geben, (ohne auf einen mausklick zu warten) per php-befehl eine andere seite zu laden?

    Maximal mit Javascript falls es Dir egal sein sollte
    bzw. wenn Du tiefer in die Materie willst (glaube ich ehrlich gesagt nicht) gibt es in PHP Funktionen, mit denen man als workaround eine solche Weiterleitung auch nach vorherigen Ausgaben realisieren kann. [1]

    by the way
    http://forum.de.selfhtml.org/archiv/2002/11/28580/#m154725

    dort bin ich zur Einsicht gekommen, dass es besser ist, meinen Programmierstil zu prüfen, als nach nicht vorhandenen Funktionen zu suchen. Letztendlich hat das Ganze einen Sinn.

    ciao
    romy

    [1] ich kann einfach den Beitrag nicht finden auf den ich mich berufen will.
    Irgendjemand hat mir Ähnliches als Antwort gegeben. Falls ich also Unsinn erzält habe, tut es mir leid (die Sache mit dem Workaround)

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    ->Alles ist gut wenn es aus Schokolade ist
    1. bzw. wenn Du tiefer in die Materie willst (glaube ich ehrlich gesagt nicht) gibt es in PHP Funktionen, mit denen man als workaround eine solche Weiterleitung auch nach vorherigen Ausgaben realisieren kann. [1]
      [1] ich kann einfach den Beitrag nicht finden auf den ich mich berufen will.

      Vielleicht meinst du damit folgendes: Man kann die Ausgabe eines Scripts in einen Puffer umleiten und erst nach der eventuellen Ausgabe eines headers Ausgeben lassen. Das geht mit der Funktion: ob_start() bzw. die Ausgabe dann mit ob_end_flush(). Siehe dazu auch die Dokumentation auf www.php.net.

      schönen Gruß
      René

      1. Hi,

        Vielleicht meinst du damit folgendes: Man kann die Ausgabe eines Scripts in einen Puffer umleiten und erst nach der eventuellen Ausgabe eines headers Ausgeben lassen. Das geht mit der Funktion: ob_start() bzw. die Ausgabe dann mit ob_end_flush(). Siehe dazu auch die Dokumentation auf www.php.net.

        genau das meinte ich,

        danke

        ciao
        romy

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        ->Alles ist gut wenn es aus Schokolade ist