PHP-pagina-omleiding

Kan PHP een omleidingsaanroep doen na het uitvoeren van een functie? Ik ben een functie aan het maken waarvan ik wil dat deze wordt omgeleid naar een bestand in dezelfde hoofdmap. Kan het?

if (...) {
    // I am using echo here.
} else if ($_SESSION['qnum'] > 10) { 
    session_destroy();
    echo "Some error occured.";
    // Redirect to "user.php".
}

Antwoord 1, autoriteit 100%

Ja, u zou de functie headergebruiken.

/* Redirect browser */
header("Location: http://www.yourwebsite.com/user.php"); 
exit();

Het is een goede gewoonte om exit()direct erna aan te roepen, zodat de onderliggende code niet wordt uitgevoerd.

Ook uit de documentatie:

Onthoud dat header() moet worden aangeroepen voordat er daadwerkelijke uitvoer wordt verzonden, hetzij door normale HTML-tags, lege regels in een bestand of vanuit PHP. Het is een veel voorkomende fout om code te lezen met include(), of required(), functions, of een andere bestandstoegangsfunctie, en spaties of lege regels te hebben die worden uitgevoerd voordat header() wordt aangeroepen. Hetzelfde probleem doet zich voor bij het gebruik van een enkel PHP/HTML-bestand.

Dit betekent dat je niets vlak voor de functie header()moet echoën, omdat dit hoogstwaarschijnlijk een foutmelding geeft. U moet ook controleren of deze code ook wordt uitgevoerd voordat andere uitvoer wordt uitgevoerd.


Antwoord 2, autoriteit 17%

Het gebruik van een javascript als failsafe zorgt ervoor dat de gebruiker wordt omgeleid (zelfs als de headers al zijn verzonden). Hier ga je:

// $url should be an absolute url
function redirect($url){
    if (headers_sent()){
      die('<script type="text/javascript">window.location=\''.$url.'\';</script‌​>');
    }else{
      header('Location: ' . $url);
      die();
    }    
}

Als je relatieve paden op de juiste manier moet afhandelen, heb ik daar een functie voor geschreven (maar dat valt buiten het bestek van de vraag).


Antwoord 3, autoriteit 6%

Eenvoudige manier is om te gebruiken:

 echo '<script>window.location.href = "the-target-page.php";</script>';

Antwoord 4, autoriteit 4%

  $url='the/url/you/want/to/go';
   echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">';

dit werkt prima voor mij.


Antwoord 5, autoriteit 3%

header( "Location: http://www.domain.com/user.php" );

Maar je kunt niet eerst een echo doen en dan omleiden.


Antwoord 6

Zoals gezegd door nixxxdoor ob_start()toe te voegen voordat php-code wordt toegevoegd, wordt voorkomen dat de headers die al zijn verzonden een fout krijgen.

Het werkte voor mij

De onderstaande code werkt ook. Maar het laadt eerst de pagina en wordt vervolgens omgeleid wanneer ik het gebruik.

echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$redirect_url.'">';

Antwoord 7

<?php
    http_redirect("relpath", array("name" => "value"), true, HTTP_REDIRECT_PERM);
?>

Antwoord 8

Je kunt deze code gebruiken om om te leiden in php

<?php
/* Redirect browser */
header("Location: http://example.com/");
/* Make sure that code below does not get executed when we redirect. */
exit;
?>

Antwoord 9

Ja.

In wezen, zolang er niets wordt uitgevoerd, kun je doen wat je wilt (een sessie beëindigen, gebruikerscookies verwijderen, Pi tot ‘n’ cijfers berekenen, enz.) voordat je een locatieheader uitgeeft.


Antwoord 10

Als u de omleiding in uw php-bestand wilt opnemen zonder dat deze noodzakelijkerwijs bovenaan staat, kunt u uitvoerbuffering bovenaan activeren en vervolgens de omleiding aanroepen vanaf elke plek op de pagina. Voorbeeld;

<?php
 ob_start(); //first line
 ... do some work here
 ... do some more
 header("Location: http://www.yourwebsite.com/user.php"); 
 exit();
 ... do some work here
 ... do some more

Antwoord 11

De functie header()doet dit:

header("Locatie: gebruiker.php");

Other episodes