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

Предупреждение: невозможно изменить информацию заголовка – уже отправленные заголовки (вывод запущен в /home/blocexco/public_html/homepage.php:73) в /home/blocexco/public_html/classes/mysql/mysql.security.php в строке 99

Эта ошибка повторяется второй раз для mysql.security.php в строке 100.

Домашняя страница: 73

<div class="login"> <?php require_once 'login.php'; ?> </div> 

mysql.security.php: 99-100

  setcookie('username', "", time() - (60 * 60 * 24 * 365)); setcookie('password', "", time() - (60 * 60 * 24 * 365)); 

Я знаю, что это не проблема «спецификации», о которой я читал. Выводится до и после моих вызовов функций header () и setcookie () – это необходимо, так как домашняя страница содержит файл php, который затем вводит правильную форму входа или выхода из системы.

Я слышал об использовании ob_start () в начале содержимого, но это не очень конкретная инструкция … Я попытался разместить ее в начале homepage.php (непосредственно перед тегом html), и это ничего не исправить ,

Я новичок в PHP (несколько дней и новичок в веб-приложении dev в целом). Честно говоря, мне кажется, что я не могу просто изменить, на какой странице я нахожусь, или создавать куки-файлы, используя php, не наклоняясь назад …

Что ж, вы не можете выводить какие-либо заголовки, включая файлы cookie, после запуска выхода. Период.
Это простое техническое ограничение, поскольку HTTP-заголовки необходимо отправлять перед телом HTTP. Здесь не ошибка PHP.

Вы должны структурировать свое приложение таким образом, чтобы сначала решить, что следует отправлять и собирать все необходимые данные, а затем переходит к выходу фактического HTML. Логика смешивания внутри основного тела HTML грязна, но вы смотрите на нее. Посмотрите, например, на шаблон MVC.

Вам нужно будет переместить все setcookie функций setcookie выше вашего вывода, потому что setcookie фактически отправляет HTTP-заголовок, который вы не можете сделать после вывода содержимого.

Это не имеет никакого отношения к php. Основой является то, что ваш браузер сначала ожидает заголовков, а позже.

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

Если вы уже отправили заголовки (неявно, потому что вы начали вывод), вы не можете отправить их снова.

Суть в том, что если вы хотите контролировать свои заголовки, вы должны сделать это первым делом. Это похоже на желание изменить введение после того, как шоу уже началось. Если вы используете функции ob_start вы сохраняете весь вывод в точке церан. Я бы не рекомендовал это; Сделайте свой поток программы, чтобы вы знали, какие заголовки вы хотите отправить, и отправьте их первым. Затем вызовите функции, которые производят вывод.

Если вы хотите установить куки-файлы после того, как кто-то вошел в систему, вы можете установить файлы cookie в другом документе .php, который отправлен для проверки подлинности входных данных пользователя. Тем не менее, они все равно должны были бы выходить за любой выход.

Убедитесь, что вызов для настройки файлов cookie – это первое, что нужно обработать.

Итак, это:

  setcookie('username', "", time() - (60 * 60 * 24 * 365)); setcookie('password', "", time() - (60 * 60 * 24 * 365)); 

следует вызывать как можно скорее, перед любым выходом.

Чтобы исправить это, вам может понадобиться удалить: и проверить его.

Затем повторно добавьте его в соответствующий файл php, используя:

 echo '<div class="login">';