Ошибка PHP: невозможно изменить информацию заголовка – уже отправленные заголовки

Возможный дубликат:
Заголовки, уже отправленные PHP

Поэтому у меня есть этот вывод на моей странице. Не понимаю, почему у меня это появляется. Я новичок в php, поэтому, возможно, это легко исправить

-I имеет файл header.php, который включает всю важную информацию, а также имеет баннер страницы. Этот header.php включен на каждую страницу.

– У меня есть проверка значения сеанса, чтобы убедиться, что пользователю разрешено находиться на определенной странице. Если пользователю не разрешено находиться там, я возвращаю их обратно на страницу входа

Однако здесь возникает ошибка. Это то, что у меня есть:

include_once ("header.php"); if ($_SESSION['uid']!='programmer') { header('Location: index.php'); echo 'you cannot be here'; exit; } 

Индекс, к которому он перенаправляется, также имеет заголовок. Итак, есть ли эти множественные ссылки заголовков, дающие мне эту ошибку? Я не вижу другого способа сделать это, и это сводит меня с ума!

Вы не можете использовать header() только текст будет выведен в браузер. Поскольку header() header.php включает предположительно выходы HTML, header() не может использоваться.

Вы можете решить это несколькими способами:

  • Переместите оператор if выше заголовка include (это не будет работать, как вы указали в комментариях, что header.php устанавливает сеанс uid и другие важные вещи).
  • Вызов ob_start() в верхней части скрипта для буферизации вывода.

Если файл header.php «имеет баннер», то он предположительно выводит на страницу некоторые HTML-данные.

Вы не можете выпускать заголовки HTTP после вывода содержимого.

Вы не можете отправлять какие-либо заголовки после отправки любого другого контента. Очень вероятным виновником является лишний пробел после вашего закрывающего тега ?> В вашем header.php. Как правило, хорошей практикой является опускание закрывающего тега полностью в любые файлы php только для скрипта.

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

Я столкнулся с подобной ошибкой (также, казалось бы, из ниоткуда) относительно функции Redirect, которая была следующей:

 function Redirect($url) { flush(); // Flush the buffer header("Location: $url"); // Rewrite the header die; } 

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

 function Redirect($url) { flush(); // Flush the buffer ob_flush(); header("Location: $url"); // Rewrite the header die; } 

Надеюсь, это поможет кому-то еще с этой проблемой!

Хорошо, так что это исправлено …… не уверен, как, хотя, может быть, кто-нибудь может объяснить, почему это работает внезапно.

Это мой код:

 include_once ("header.php"); if ($_SESSION['uid']!='programmer') { if(isset($_SESSION['uid'])) { echo $_SESSION['uid']; } header('Location: index.php'); exit; } 

Позвольте мне повторить, все работает сейчас! PHP … почему вы сейчас работаете?