web-dev-qa-db-fra.com

Redirection vers l'URL spécifiée lors de l'achèvement du script PHP?

Comment puis-je obtenir une fonction PHP accéder à un site Web spécifique lorsqu'elle est exécutée?)

Par exemple:

<?php
  //SOMETHING DONE
  GOTO(http://example.com/thankyou.php);
?>

J'aimerais vraiment ce qui suit ...

<?php
  //SOMETHING DONE
  GOTO($url);
?>

Je veux faire quelque chose comme ça:

<?php
  //SOMETHING DONE THAT SETS $url
  header('Location: $url');  
?>
35
JoshFinnie
<?
ob_start(); // ensures anything dumped out will be caught

// do stuff here
$url = 'http://example.com/thankyou.php'; // this can be set based on whatever

// clear out the output buffer
while (ob_get_status()) 
{
    ob_end_clean();
}

// no redirect
header( "Location: $url" );
?>
64
Patrick Hogan

Vous pouvez toujours simplement utiliser la balise pour actualiser la page - ou peut-être simplement déposer le code javascript nécessaire dans la page à la fin, ce qui entraînerait la redirection de la page. Vous pouvez même lancer cela dans une fonction onload, donc une fois que c'est fini, la page est redirigée

<?php

  echo $htmlHeader;
  while($stuff){
    echo $stuff;
  }
  echo "<script>window.location = 'http://www.yourdomain.com'</script>";
?>
31
user44856

Si "SOMETHING DONE" n'invoque aucune sortie via echo/print/etc, alors:

<?php
   // SOMETHING DONE

   header('Location: http://stackoverflow.com');
?>
14
Bullines

Notez que cela ne fonctionnera pas:

header('Location: $url');

Vous devez faire ceci (pour l'expansion variable):

header("Location: $url");
5
FryGuy
<?php

// do something here

header("Location: http://example.com/thankyou.php");
?>
3
Aistina

n'oubliez pas de mettre un "dé" après votre appel pour que la redirection se produise avant que le reste du code de la page ne soit lancé. une. Si vous avez des fonctions d'en-tête plus bas dans la page, elles remplaceront celles plus loin dans le code.

b: im en supposant que vous ne voulez pas que le reste du code de la page soit exécuté et que vous mettiez cette redirection en premier lieu [peut-être].

exemple:

<?php

// do something here

header("Location: http://example.com/thankyou.php");
die();

//code down here now wont get run

?>
2
as_bold_as_love

Voici une solution au problème "les en-têtes ont déjà été envoyés". Supposons que vous validez et envoyez un formulaire par courrier électronique. Assurez-vous que le code php est la première chose sur votre page ... avant les balises doctype et head et tout ce jazz. Ensuite, lorsque le POST revient à la page, le code php vient en premier et ne rencontre pas le problème des en-têtes déjà envoyés.

0
Paul M