PHP peut-il effectuer un appel de redirection après avoir exécuté une fonction? Je crée une fonction à l'issue de laquelle je souhaite la rediriger vers un fichier situé dans le même dossier racine. Cela peut-il être fait?
if {
//i am using echo here
}
else if ($_SESSION['qnum'] > 10) {
session_destroy();
echo "Some error occured.";
//redirect to user.php
}
Oui, vous utiliseriez la fonction en-tête .
/* Redirect browser */
header("Location: http://www.yourwebsite.com/user.php");
exit();
Il est recommandé d'appeler exit()
juste après, afin que le code situé en dessous ne soit pas exécuté.
En outre, à partir de la documentation:
Rappelez-vous que header () doit être appelé avant toute sortie réelle, soit par des balises HTML normales, des lignes vides dans un fichier ou par PHP. C'est une erreur très courante de lire du code avec include (), ou require (), des fonctions ou une autre fonction d'accès au fichier, et d'avoir des espaces ou des lignes vides qui sont générés avant l'appel à header (). Le même problème existe lorsque vous utilisez un seul fichier PHP/HTML.
Cela signifie que vous ne devez rien faire écho juste avant la fonction header()
, cela risquerait fort de générer une erreur. En outre, vous devrez vérifier que ce code est exécuté avant toute autre sortie.
L'utilisation d'un javascript comme sécurité intégrée garantit la redirection de l'utilisateur (même si les en-têtes ont déjà été envoyés). Voici:
// $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();
}
}
Si vous devez gérer correctement les chemins relatifs, j'ai écrit une fonction pour cela (mais cela sort du cadre de la question).
Un moyen simple est d'utiliser:
echo '<script>window.location.href = "the-target-page.php";</script>';
$url='the/url/you/want/to/go';
echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">';
cela fonctionne bien pour moi.
header( "Location: http://www.domain.com/user.php" );
Mais vous ne pouvez pas d'abord faire un écho, puis rediriger.
<?php
http_redirect("relpath", array("name" => "value"), true, HTTP_REDIRECT_PERM);
?>
Vous pouvez utiliser ce code pour rediriger en php
<?php
/* Redirect browser */
header("Location: http://example.com/");
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
Comme indiqué par nixxx, ajouter ob_start()
avant d'ajouter du code php empêchera les en-têtes déjà envoyés d'erreur.
Ça a fonctionné pour moi
Le code ci-dessous fonctionne également. Mais il charge d'abord la page, puis redirige lorsque je l'utilise.
echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$redirect_url.'">';
Oui.
Essentiellement, tant que rien n’est généré, vous pouvez faire ce que vous voulez (tuer une session, supprimer les cookies des utilisateurs, calculer les chiffres Pi en "n", etc.) avant d’envoyer un en-tête d’emplacement.
si vous souhaitez inclure la redirection dans votre fichier php sans nécessairement l'avoir en haut, vous pouvez activer la mise en mémoire tampon de sortie en haut, puis appeler rediriger de n'importe où dans la page. Exemple;
<?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
en fait, j'ai trouvé cela dans le code d'un cms basé sur php.
redirect ('? module = blog', 0);
donc c'est possible. Dans ce cas, vous êtes connecté au niveau administrateur, donc pas de mal, pas de faute (je suppose). la première partie est l'url, et la seconde? Je ne trouve aucune documentation sur le nombre entier, mais je suppose que c'est soit l'heure, soit les données, car il est attaché à un formulaire.
Moi aussi, je voulais rafraîchir une page après un événement et le placer dans un meilleur endroit a bien fonctionné.
La fonction header()
dans PHP effectue cette opération, mais assurez-vous de l'appeler avant tout autre contenu de fichier envoyé au navigateur, sinon vous recevrez une erreur.
JavaScript est une alternative si vous avez déjà envoyé le contenu du fichier.
Je définirais probablement le message comme variable de session, redirigerais l'utilisateur vers une autre page qui afficherait le message et détruirait la session.