Заголовки не перенаправляют (и ошибок нет) - PullRequest
6 голосов
/ 03 мая 2011

Это очень странная проблема.В моем коде у меня есть перенаправление, которое отлично работает на моем локальном сервере.

header("location:/sign-up-success");

Когда я запускаю в производство, он просто не перенаправляется.Есть ли параметр, который мне не хватает?

Я даже пробовал:

header("Location: https://www.myurl.com/sign-up-success");

Кажется, просто пропустить перенаправление.Есть идеи?

Ответы [ 4 ]

2 голосов
/ 03 мая 2011

возможная причина: вы отправили какой-то вывод в браузер до вызова header()
решение: написать ob_start() вверху страницы

Лучшая практика : alwyas пишите exit() после header() ..

Ссылка

2 голосов
/ 03 мая 2011

Посмотрите на значение error_reporting на рабочем сервере.Если он установлен на слишком низкий уровень, в журнале ничего не будет, поскольку ошибки более низкого уровня, чем error_reporting, просто игнорируются.То же самое относится к использованию @ - оно устанавливает error_reporting в 0, поэтому, если что-то плохое случится (например, если функция даже не определена), вы ничего не увидите в журнале.

Из чегоВы писали о включении буферизации вывода, кажется, что у вас есть какой-то вывод до header() (именно поэтому включение буферизации вывода помогает) и что ваш error_reporting установлен в 0 (вот почему предупреждение о «Не удается изменить информацию заголовка» былоне сообщается / не регистрируется).


На заметку на стороне ... Для получения большей части отчетов об ошибках:

  • установите error_reporting в E_ALL | E_STRICT (вкак в dev, так и в рабочей среде)
  • включить ведение журнала ошибок (критически важно для производственной среды, хотя его включение также не повредит в среде dev)
  • установить display_error в true в среде разработчика, false в производственной среде (критический !!! пользователь не должен видеть никаких предупреждений / уведомлений / ошибок PHP)
  • дополнительно, вы можете захотеть set_error_handler() выводить или регистрировать больше информации, чем по умолчаниюОбработчик ошибок t (например, вы можете сохранить debug_backtrace() при возникновении ошибки)
0 голосов
/ 04 мая 2011

Спасибо за все ответы.Похоже, что ответ на этот вопрос дал @netcoder в комментариях.Ответ найден ниже:

В файле php.ini на моей локальной машине у меня было «output_buffering = 4096», а на рабочем сервере было установлено «output_buffering = off».Включение этого исправило исправленную проблему заголовка и некоторые другие проблемы.

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

Спасибо всем.

0 голосов
/ 03 мая 2011

Похоже, что просто пропустить перенаправление.

Вам нужно посмотреть, что именно скрипт возвращает в заголовках / содержимом.Для этого есть множество инструментов: HTTP-фидлер, iehttpheaders для MSIE, для Firefox есть тамперданные, liveheaders, панель инструментов веб-разработчика и многое другое.Или прослушать сетевой трафик (хотя декодирование ssl может быть PITA)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...