Перенаправление страницы PHP

Может ли PHP выполнить перенаправление после выполнения функции? Я создаю функцию, по завершении которой я хочу, чтобы она перенаправляла файл, расположенный в той же корневой папке. Это можно сделать?

 if {
      //i am using echo here
 }

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

Ответы

Ответ 1

Да, вы бы использовали функцию заголовка.

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

Рекомендуется вызывать exit() сразу после него, чтобы код ниже не выполнялся.

Также из документации:

Помните, что header() должна вызываться перед отправкой любого фактического вывода, либо обычными тегами HTML, пустыми строками в файле, либо из PHP. Это очень распространенная ошибка при чтении кода с помощью функций include() или require(), или другой функции доступа к файлу, с пробелами или пустыми строками, которые выводятся до вызова header(). Та же проблема существует при использовании одного файла PHP/HTML.

Это означает, что вы не должны ничего выводить прямо перед функцией header(), так как это, скорее всего, приведет к ошибке. Кроме того, вам нужно будет убедиться, что этот код запускается перед любым другим выводом.

Ответ 2

Использование 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();
    }    
}

Если вам нужно правильно обрабатывать относительные пути, я написал функцию для этого (но это выходит за рамки вопроса).

Ответ 3

Простым способом является использование:

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

Ответ 4

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

это работает для меня отлично.

Ответ 5

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

Но вы не можете сначала выполнить эхо, а затем перенаправить.

Ответ 6

<?php

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

?>

Ответ 7

Как отмечено nixxx добавлением ob_start() перед добавлением какого-либо php-кода, это предотвратит отправку заголовков.

Это сработало для меня

Также приведен код ниже. Но он сначала загружает страницу, а затем перенаправляет, когда я ее использую.

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

Ответ 8

Да.

По сути, пока ничего не выводится, вы можете делать все, что хотите (убить сеанс, удалить файлы cookie пользователя, вычислить цифры Pi до 'n' и т.д.) до выпуска заголовка местоположения.

Ответ 9

Я бы, скорее всего, установил сообщение как переменную сеанса, перенаправил пользователя на другую страницу, которая отображает сообщение и уничтожает сеанс.

Ответ 10

Функция header() в PHP делает это, но убедитесь, что вы вызываете ее, прежде чем любое другое содержимое файла будет отправлено в браузер, иначе вы получите сообщение об ошибке.

JavaScript является альтернативой, если вы уже отправили содержимое файла.

Ответ 11

На самом деле, я нашел это в коде php на основе cms.

redirect ('? module = blog', 0);

так что это возможно. В этом случае вы вошли в систему на уровне администратора, поэтому никакого вреда не фол (я полагаю). первая часть - это URL, а вторая? Я не могу найти какую-либо документацию для целого числа, но я предполагаю, что это либо время, либо данные, поскольку они привязаны к форме.

Я тоже хотел обновить страницу после события, и это было лучше в хорошем месте.

Ответ 12

Вы можете использовать этот код для перенаправления в php

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

Ответ 13

если вы хотите включить перенаправление в свой 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

Ответ 14

Функция header() выполняет следующее:

header("Location: user.php");