php redirect не работает и ничего не делает - PullRequest
1 голос
/ 25 июня 2011

У меня есть просто простой PHP-файл с этой строкой кода.

  <?php header("Location: MyBooks.php", true); exit();?>

Форма 1 отправляет форму в этот простой php-файл, и этот файл должен перенаправляться на MyBooks.php в том же каталоге.

Я просто не получаю его, почему он не получаетперенаправляет?

нет сообщений об ошибках.

Ответы [ 6 ]

4 голосов
/ 25 июня 2011

Похоже, проблема на сервере, на котором вы работаете: http://social.msdn.microsoft.com/Forums/expression/en-US/db37d2ea-65ef-40ad-8a25-62a846a5d00d/php-headers-and-redirect

Таким образом, вы должны вручную указать код ответа для 302 перед отправкой заголовка местоположения:

header('HTTP/1.0 302 Found');
header('Location: http://localhost/MyBooks.php');
exit;

И не забудьте использовать абсолютный URL в Location.

4 голосов
/ 25 июня 2011

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

Проверьте это с помощью этого кода:

if (headers_sent()) {
    die("Error: headers already sent!");
}
else {
    header("Location: MyBooks.php", true);
    exit();
}

Если при этом выдается ошибка, то перед вызовом header необходимо убедиться, что вывод вообще не выводится.Проверьте, что:

  • Вы вообще ничего не echo (или иным образом не выводите HTML) до header вызова
  • До <?php абсолютно нет пробеловначальный тег или конечный тег ?> (если имеется) в ваших сценариях PHP

Обновление: как проверить заголовки HTTP с помощью Chrome

How to check HTTP headers using Chrome

  1. Выберите вкладку Сеть
  2. Выберите Документы в меню чуть выше консоли, чтобы сузить список справа
  3. Выберите единственный ресурс, которому соответствует фильтриз списка справа (http://localhost/ здесь)
  4. Перейдите на вкладку Заголовки
3 голосов
/ 17 февраля 2016

Единственный способ, которым я мог это сделать, был:

$url = "http://www.google.com";
echo "<script>window.open('".$url."','_self');</script>";

С уважением

2 голосов
/ 25 июня 2011

Вы также можете объединить два вызова заголовка в:

header('Location: http://localhost/MyBooks.php', true, 302);
exit;

Таким образом, вам не нужно будет помнить формат / описание кода статуса HTTP.Подпись функции header :

void header (строка $ string [, bool $ replace = true [, int $ http_response_code]])

0 голосов
/ 04 марта 2012

У меня была эта проблема, и это было связано с тем, что в заголовке было задано несколько мест до завершения скрипта.

<?php
    // WARNING: BAD CODE

    if($thisShouldBeTrue) {
        header('Location: http://www.example.com');
    }

    if($weShouldNeverGetHere) {
        header('Location: http://www.otherexample.com');
    }
?>

Я думал, что php будет перенаправлять сразу на первый заголовок и никогда не попадет на второйесли блок.Я был неправ.Всегда умирайте () или выходите после перенаправления, если вы хотите немедленно туда попасть.

<?php
    // CORRECT

    if($thisMightBeTrue) {
        header('Location: http://www.example.com');
        die();
    }

    if($orThisMightBeTrue) {
        header('Location: http://www.otherexample.com');
        die();
    }
?>
0 голосов
/ 25 июня 2011

Я думал, что нет проблем в этом коде, проверьте, выполняется ли выполнение этой строки или нет,

попробуйте без логического

<?php header("Location: MyBooks.php); exit();?> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...