Может ли PHP выполнить перенаправление после выполнения функции? Я создаю функцию, по завершении которой я хочу, чтобы она перенаправляла файл, расположенный в той же корневой папке. Это можно сделать?
if { //i am using echo here } else if ($_SESSION['qnum'] > 10) { session_destroy(); echo "Some error occured."; //redirect to user.php }
Да, вы бы использовали функцию заголовка .
header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */ exit();
Хорошей практикой является вызов exit()
сразу после того, как код не будет выполнен.
Кроме того, из документации:
Помните, что header () должен быть вызван до отправки любого фактического результата либо с помощью обычных тегов HTML, пустых строк в файле, либо из PHP. Очень распространенная ошибка для чтения кода с функциями include () или require (), функций или другой функции доступа к файлам, а также пробелы или пустые строки, которые выводятся перед вызовом header (). Та же проблема существует при использовании одного файла PHP / HTML.
Это означает, что вы не должны эха ничего перед функцией header()
, так как это приведет скорее к ошибке. Кроме того, вам нужно будет убедиться, что этот код запускается и перед любым другим выходом.
Использование javascript в качестве отказоустойчивого файла гарантирует, что пользователь перенаправлен (даже если заголовки уже отправлены). Ну вот:
// $url should be an absolute url function redirect($url){ if (headers_sent()){ die('<script type="text/javascript">window.location.href="' . $url . '";</script>'); }else{ header('Location: ' . $url); die(); } }
Если вам нужно правильно обрабатывать относительные пути, я написал для этого функцию (но это выходит за рамки вопроса).
$url='the/url/you/want/to/go'; echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">';
это работает для меня хорошо.
Простым способом является использование:
echo '<script>window.location.href = "the-target-page.php";</script>';
header( "Location: http://www.domain.com/user.php" );
Но вы не можете сначала сделать эхо, а затем перенаправить.
<?php http_redirect("relpath", array("name" => "value"), true, HTTP_REDIRECT_PERM); ?>
Да.
По сути, пока ничего не выводится, вы можете делать все, что хотите (убивать сеанс, удалять файлы cookie пользователя, вычислять цифры Pi до «n» и т. Д.) До выпуска заголовка местоположения.
Я бы, скорее всего, установил сообщение как переменную сеанса, перенаправил пользователя на другую страницу, которая отображает сообщение и уничтожает сеанс.
Функция header()
в PHP делает это, но убедитесь, что вы вызываете ее до того, как любое другое содержимое файла будет отправлено в браузер, иначе вы получите сообщение об ошибке.
JavaScript является альтернативой, если вы уже отправили содержимое файла.
Фактически, я нашел это в коде php на основе cms.
redirect ('? module = blog', 0);
так что можно. В этом случае вы вошли в систему на уровне администратора, поэтому никакого вреда не фол (я полагаю). первая часть – это URL, а вторая? Я не могу найти документацию для целого числа, но я думаю, что это либо время, либо данные, поскольку они привязаны к форме.
Я тоже хотел обновить страницу после события, и это было лучше, если бы это было хорошо.
Вы можете использовать этот код для перенаправления в php
<?php /* Redirect browser */ header("Location: http://example.com/"); /* Make sure that code below does not get executed when we redirect. */ exit; ?>
если вы хотите включить перенаправление в ваш php-файл, не обязательно используя его сверху, вы можете активировать буферизацию вывода вверху, а затем перенаправить вызов из любой точки страницы. Пример;
<?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
Как и было отмечено nixxx, добавление ob_start ob_start()
перед добавлением какого-либо php-кода предотвратит отправку заголовков.
Это сработало для меня
Также приведен код ниже. Но сначала загружает страницу, а затем перенаправляет, когда я ее использую.
echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$redirect_url.'">';
Функция header () выполняет следующее:
header ("Location: user.php");
Я серач об этом, и я нашел ответ на этот ответ в
https://stackoverflow.com/questions/13539752/redirect-function/13539808
function redirect_url($path) { header("location:".$path); exit; }