Возможный дубликат:
Заголовки, уже отправленные 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()
не может использоваться.
Вы можете решить это несколькими способами:
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 … почему вы сейчас работаете?