@tmtimuchin

В чем ошибка headers already sent?

Я начинающий php-разработчик. У меня возникла проблема с выскакивающей ошибкой headers already sent. Проблему я, грубо говоря, "решил" - я вставил этот же код в аналогичный файл (подключение к БД) в другом своем проекте для проверки и убрал от туда все комментарии и лишние дробления php-кода. Это сработало. Однако в исходном проекте с точно таким же кодом это не работает, ошибка ни куда не исчезла.

Помогите пожалуйста! Между двумя файлами (исходном и проверочном) разницы нет абсолютно никакой кроме имени БД, однако в проверочном всё работает нормально, а в исходном нет.

Вот исходный код:
<!-- План:
1. Подключаемся к БД (стр. 16)
2. Открываем сессию (стр. 20)
3. Создаем функцию для перенаправления на другую страницу (не обязательно) (стр. 24) -->

<!-- Используемые переменные:
1. $link - переменная подключения к БД
2. $refresh - принимаемое значение функции refresh, куда вводится ссылка на файл, в который мы переходим при выполнении функции -->

<!-- Используемые функции:
1. mysqli_connection - базовая функция, в значения которой вписываются сервер, имя пользователя, пароль и имя БД. Эта функция используется 1 раз на весь сайт и внесена в переменную $link
2. session_start - функция, открывающая сессию
3. function refresh - нами созданная функция с принимаемым значением в виде ссылки на файл, на который нам нужно перейти -->

<?php
  $link = mysqli_connect('localhost', 'root', '', 'bd'); // Шаг 1: подключаемся к БД с помощью функции mysqli_connection. В скобках указываем сервер, имя пользователя, пароль, имя БД.
?>

<?php
  session_start(); // Шаг 2: создаем сессию. Это нужно для того, чтобы авторизованный пользователь был авторизован на всех страницах
?>

<?php
  function refresh($refresh) { // Шаг 3: создаем функцию для перенаправления на др. страницу для того, чтобы потом не переписывать meta-тег по 100 раз. Вместо $refresh на других страницах писать ссылку на нужный файл
    ?>
      <meta http-equiv="refresh" content="1; URL=<?php $refresh ?>">
    <?php
  }
?>


И вот то, что получается:
<?php
  $link = mysqli_connect('localhost', 'root', '', 'bd');

  session_start();

  function refresh($refresh) {
    ?>
      <meta http-equiv="refresh" content="1; URL=<?php $refresh ?>">
    <?php
  }
?>


UPD: Я убрал комментарии и дробление php-блоков во всех файлах этого проекта, и ошибка пропала... Но ведь это не решение? До этого в других проектах я дробил код для того, чтобы он был более читабельным, и оставлял комментарии.
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
Adamos
@Adamos
До вызова session_start на страницу не должно выводиться ни одного символа, т.к. она устанавливает заголовки страницы - и не может их установить, если уже выдается тело страницы. Убирайте все эти комментарии до <?php

А также убирайте разбивки
?>

<?php
и никогда больше так не делайте.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы