header() - Location nach Zeit ausführen


rflx

Erfahrenes Mitglied
#1
Hallo zusammen,

bin jetzt schon eine Weile dran herauszufinden wie man einen header("Location: x"); Befehl nach einer gegebenen Zeit ausführen kann.

Im Prinzip sollte daraus eine einfache PHP-Weiterleitung nach einer gewissen Zeit entstehen.

Für andere Lösungsmöglichkeiten wäre ich auch offen.

Danke und freundliche Grüsse

rflx
 

Gumbo

Erfahrenes Mitglied
#2
Bei dem inoffiziellen Header-Feld „Refresh“ ist die Angabe einer Verzögerung möglich:
Code:
Refresh: n; url=http://example.net/
Manche Webbrowser unterstützen dies paradoxerweise allerdings nur als HTTP-äquivanlentes meta-Element.
 

SnEaKy

Erfahrenes Mitglied
#3
Also ich würde dir die header-methode nicht empfehlen. Den sollten schon mal header-informationen gesendet worden sein, so kannes kein zweites mal passieren.
ein Lösungsvorschlag wär folgender:
HTML:
<meta http-equiv="refresh" content="3; URL=index.php">
die "3" bedeuten 3 Sekunden wartezeit.
Es gibt auch noch ne JavaScript-Variante, aber die kann ich nicht auswendig.
Hoffe das hilft dir schonma weiter.
 

rflx

Erfahrenes Mitglied
#4
Hallo Gumbo,

Danke für deine Antwort.

meinst du das so:
PHP:
header ("Refresh: 10; http://example.net/");
?

@SnEaKy
Kenne die Meta-Variante, doch diese hilft mir nicht weiter. Trotzdem Danke.

Freundliche Grüsse

rflx
 
Zuletzt bearbeitet:
#5
Wenn du nichts anzeigen willst kannst du es folgenmaßen lösen. (Finde ich jedoch unsinnig :), da du vorher keine Inhalte ausgeben kannst!)
PHP:
<?php
$secondsToSleep = 10;
$newLocation    = 'http://www.zielurl.tld';

if (!headers_sent()) {
    sleep($secondsToSleep);
    header('Location: ' . $newLocation);
}
?>
Wenn du während des Wartens HTML-Inhalte anzeigen willst würde ich es mit dem entsprechenden Meta-Tag machen. Alternativ solltest du die Ziel-URL jedoch auch noch als Link auf der Seite positionieren damit der Benutzer der die automatische Weiterleitung deaktiviert hat auch zum Ziel gelangen kann.

Von JavaScript würd generell immer absehen, wenn es mit anderen Mitteln zu lösen ist, da einige Benutzer immer noch JavaScript deaktiviert bzw. nur bei vertrauenwürdigen Seiten zulassen!
 

rflx

Erfahrenes Mitglied
#6
Heyla Martin,

Danke für deine Alternative!

Habe jetzt noch eine Variante aus dem php.net Forum gefunden.
PHP:
<?php

function redirect($u , $s = 0) {
    session_write_close();
    if($s < 1)
        header("Location: " . $u);
    exit("
        <meta
        http-equiv=\"refresh\"
        content=\"{$s};url={$u}\"
        >
        <script>
        function doRefresh() {
            window.location = '{$u}';
        }
        doRefreshTimeout = setTimeout(\"doRefresh()\" , ".($s*1000).");
        </script>
    ");
}

?>
 

tobee

Erfahrenes Mitglied
#7
Heyla Martin,

Danke für deine Alternative!

Habe jetzt noch eine Variante aus dem php.net Forum gefunden.
PHP:
<?php

function redirect($u , $s = 0) {
    session_write_close();
    if($s < 1)
        header("Location: " . $u);
    exit("
        <meta
        http-equiv=\"refresh\"
        content=\"{$s};url={$u}\"
        >
        <script>
        function doRefresh() {
            window.location = '{$u}';
        }
        doRefreshTimeout = setTimeout(\"doRefresh()\" , ".($s*1000).");
        </script>
    ");
}

?>
Aber wieso denn die Session Daten speichern und danach die Session beenden, bevor man die Weiterleitung macht?
 
#8
Heyla Martin,

Danke für deine Alternative!

Habe jetzt noch eine Variante aus dem php.net Forum gefunden.
PHP:
<?php

function redirect($u , $s = 0) {
    session_write_close();
    if($s < 1)
        header("Location: " . $u);
    exit("
        <meta
        http-equiv=\"refresh\"
        content=\"{$s};url={$u}\"
        >
        <script>
        function doRefresh() {
            window.location = '{$u}';
        }
        doRefreshTimeout = setTimeout(\"doRefresh()\" , ".($s*1000).");
        </script>
    ");
}

?>
Ich bin zusätzlich der Meinung das der exit()-"Abschnitt" mit Sicherheit keinen annähernd validen HTML-Code erzeugt :suspekt:. Für mich wirkt die Funktion "aus dem Kontext" gerissen!

Wenn ich heute Abend von der Arbeit komme und das Problem noch besteht, schreib ich dir mal schnell was ordentliches :eek:)