2010-04-25 3 views
24

Вот мой файл. Я хочу перенаправить его, но ничего не происходит. Чтобы проверить, что происходит, я добавил эхо перед частью заголовка.PHP-заголовок location-redirect не работает - почему?

Он не выдает ошибку или не перенаправляет на index.php. Что не так? Включение/выключение буферизации вывода, но ничто не делает перенаправление. Что я могу сделать?

<? 
error_reporting(E_ALL); 
echo 'This is an error'; 

header("Location: login.php"); 
die(); 
?> 

Благодаря

+1

Is * дисплей \ _errors * включен? – Gumbo

+0

@ Gumbo - Это точно! – Industrial

+3

Имеет ли код, который вы предоставили, по крайней мере, вывод «Это ошибка»? – timdev

ответ

1

я напомнил себе, что у меня был Xdebug установлен на фактической тестовой среде и после того, как прибегая к помощи, я нашел этот сайт: http://bugs.xdebug.org/view.php?id=532

Так что я скачал последней версии xDebug и изменил php.ini соответственно для нового файла, и все работает как шарм. Отправляются заголовки - выполняется redirecionion и отображаются ошибки.

Спасибо всем за помощь!

43

От PHP documentation:

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

И в вашем случае, вы используете echo перед тем header()

+0

Я знаю это, и именно поэтому я сделал эхо перед заголовком() - вызовом. Он делает ошибку на других серверах и должен это делать. Почему ничего не происходит? – Industrial

+7

Альтернативой заголовкам изменений было бы использовать: ' window.location.replace (' login.php ')"?> ' –

1

У вас есть короткие теги включены? попробовать с длинным теге <?php:

<?php 
error_reporting(E_ALL); 
header("Location: login.php"); 
die(); 
?> 
+0

Да, у меня есть набор коротких тегов, и все остальное работает отлично, за исключением заголовка ... – Industrial

0

Включен ли display_errors?
@Gumbo - Это точно!

ну, это точно нет. потому что

Чтобы проверить, что происходит, я добавил эхо перед частью заголовка.

Если вы включили display_errors, в нем будет отображаться ошибка, по крайней мере, когда вы turned output buffering on.

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

error_reporting(E_ALL); 
echo $undef9306; 

Я уверен, что вы не будете видеть его. Итак, вы должны повернуть ошибки отображения на

Далее, на стороне сервера вы можете использовать функцию headers_sent(), чтобы увидеть, были ли отправлены заголовки. На стороне клиента используйте сниффер HTTP, чтобы узнать, отправлено ли что-либо.

И проверьте свой файл на спецификацию.

+0

Привет. Боюсь, что нет. Display_errors активированы, как сказано, но это был xDebug, который вызвал это ... Большое спасибо за вашу помощь Col.! – Industrial

Смежные вопросы