Перенаправление страницы PHP [дубликат]
На этот вопрос уже есть ответ здесь:
- Как сделать перенаправление в PHP? 28 ответов
Может ли PHP выполнить перенаправляющий вызов после выполнения функции? Я создаю функцию, по завершении которой я хочу, чтобы она перенаправлялась в файл, расположенный в той же корневой папке. Можно ли это сделать?
if {
//i am using echo here
}
else if ($_SESSION['qnum'] > 10) {
session_destroy();
echo "Some error occured.";
//redirect to user.php
}
15 answers
Да, вы бы использовали функцию заголовка .
header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();
Рекомендуется вызывать exit()
сразу после слов, чтобы код под ним не выполнялся.
Также, из документации:
Помните, что заголовок() должен быть вызван перед отправкой любого фактического вывода, либо обычными тегами 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=\''.$url.'\';</script>');
}else{
header('Location: ' . $url);
die();
}
}
Если вам нужно правильно обрабатывать относительные пути, я написал для этого функцию (но это выходит за рамки вопроса).
Простой способ заключается в использовании:
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.'">';
Это прекрасно работает для меня.
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 является альтернативой, если вы уже отправили содержимое файла.
На самом деле, я нашел это в коде cms на основе php.
Перенаправление ('?модуль=блог', 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()
перед добавлением любого кода php предотвратит ошибку уже отправленных заголовков.
Это сработало для меня
Приведенный ниже код также работает. Но он сначала загружает страницу, а затем перенаправляет, когда я ее использую.
echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$redirect_url.'">';
Функция заголовка() выполняет следующее:
header("Location: user.php");
Я спрашиваю об этом и нахожу соответствующий ответ в
Https://stackoverflow.com/questions/13539752/redirect-function/13539808
function redirect_url($path)
{
header("location:".$path);
exit;
}