Размещение заголовка PHP-заголовка не работает - почему?
Вот мой файл. Я хочу перенаправить его, но ничего не происходит. Чтобы проверить, что происходит, я добавил эхо перед частью заголовка.
Он не выдает ошибку или не перенаправляет на index.php. Что не так?
Я включил/выключить буферизацию вывода, но ничто не делает перенаправление. Что я могу сделать?
<?
error_reporting(E_ALL);
echo 'This is an error';
header("Location: login.php");
die();
?>
Спасибо
Ответы
Ответ 1
Я напомнил себе, что у меня установлен xDebug на реальной тестовой среде, и после его поиска я нашел этот сайт: http://bugs.xdebug.org/view.php?id=532
Итак, я скачаю последнюю версию xDebug и соответственно изменил php.ini для нового файла, и все работает как шарм. Отправляются заголовки - выполняется redirecionion и отображаются ошибки.
Спасибо всем за вашу помощь!
Ответ 2
От Документация по PHP:
header()
должен быть вызван до отправки любого фактического вывода либо с помощью обычных тегов HTML, пустых строк в файле, либо из PHP.
И в вашем случае вы используете echo
до header()
Ответ 3
Есть ли у вас короткие теги?
попробуйте с длинным тегом <?php
:
<?php
error_reporting(E_ALL);
header("Location: login.php");
die();
?>
Ответ 4
Включен ли display_errors?
@Gumbo - Это точно!
ну, это точно. потому что
Чтобы проверить, что происходит, я добавил эхо перед частью заголовка.
если вы включили display_errors, он выведет ошибку, по крайней мере, когда вы turned output buffering on
.
Итак, прежде всего убедитесь, что вы видите сообщения об ошибках.
просто распечатайте переменную undefined,
error_reporting(E_ALL);
echo $undef9306;
Я уверен, вы его не увидите.
Таким образом, вы должны отображать ошибки на
Далее, на стороне сервера вы можете использовать функцию headers_sent()
, чтобы увидеть, были ли отправлены заголовки. На стороне клиента используйте сниффер HTTP, чтобы узнать, отправлено ли что-либо.
И проверьте свой файл для спецификации.