Почему в PHP выдается ошибка: Cannot send session cache limiter — headers already sent?

Доброго времени суток, коллеги! Сегодня расскажу, как я боролся с этой ошибкой, о которой вы могли прочитать в заголовке поста. То, что вы читаете этот пост показывает, что вы тоже столкнулись с ней. А может у вас возникали и другие ошибки? Не стесняйтесь писать об этом в комментариях, я буду очень рад. Чтобы у нас было поменьше разных ошибок необходимо иметь опыт. Не правда ли? В конце статьи вы найдете, то что поможет вам его приобрести. А теперь приступим к нашей ошибке!
При написании:

<?php
	session_start();
?>

Вышла ошибка:

Warning: session_start() [function.session-start]: Cannot send session cache limiter — headers already sent (output started at X:/home/localhost/www/phpbloguser/header.html:6) in X:/home/localhost/www/phpbloguser/blocks/global.inc.php on line 110

Оказывается в php.ini нужно директиву output_buffering поставить в «On» (по умолчанию — Off), см. php.ini. И всё получиться! Чтобы заработало нужно перезагрузить Ваш сервер.

Ещё эта ошибка возникает по другим причинам:

Нужно посмотреть, может есть пробел, таб, перенос строки перед «<?».

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

Здесь же написано, что заголовки УЖЕ были отправлены. Поэтому нужно проверить, не выводиться ли что-нибудь в окно браузера, до того как я стартую сессию с помощью session_start()?

Еще ваш php файл должен быть сохранен в кодировке UTF 8 (без BOM), если с BOM, то вначале файла всегда выводятся три символа, вот и возникает эта ошибка.

29 ответы
  1. LAU говорит:

    Автор!!! Ты КРАСАВА!!!! я перерыла кучу форумов, где все подряд вердили про кодировку Utf-8 без BOM

    пока не залезла и не сменила директиву output_buffering в ON!!!
    спасибо ЧЕЛОВЕЧЕСКОЕ

        • softmaker говорит:

          Конфигурационный файл в папке сервера апаче, подробнее можете прочитать тут.

  2. Вячеслав говорит:

    Спасибо огромное! У меня проблема заключалась всего лишь в лишнем пробеле перед <?php !!!!! А я уже десятки форумов перерыл и голова кругом была, весь код перелопатил

    • softmaker говорит:

      Вячеслав, рад, что вам помогла эта заметка! Успехов!

  3. Николай говорит:

    Спасибо большое! Статья помогла очень. Про этот пропуск перед <? догадаться вообще не реально. И самое смешное, что он в редакторе был не виден! Заметил я его только когда в другом редакторе открыл файл.

    • softmaker говорит:

      Здорово, что помогла статья, Николай!

  4. Сергей говорит:

    Пропуски проверил, изменение файла не помогло

  5. Сергей говорит:

    Изменил кодировку с UTF 8 на ANSI, ошибка исчезла

    • softmaker говорит:

      Сергей, здорово, что вы нашли свое решение!

  6. даниил говорит:

    Спасибо автору за статью! Оказалось у меня просто стоял пробел перед <? , впринципе особенно это ошибка не мешала (высвечивалась на заднем фоне сайта, но дискомфорт ощущался) ещё раз спасибо))))

  7. Fara говорит:

    Ай брат от души помогло с output_buffering в ON!!!
    Везде пишут про UTF8 без bom
    Неделю мучился
    Респектуха тебе
    Домик тебе в Польше, два красных порше, жену хорошую, детишек по-больше

  8. Andrew говорит:

    php.ini, output_buffering установил в ON и ошибка исчезла. Но появилась другая проблема — Все заголовки и текст превратились в абра-кадабру типа накомство. Понимаю что что-то с кодировкой но не пойму что. Кодировка всех файлов в UTF 8 (без BOM)

    • softmaker говорит:

      Странно, похоже на то, как-будто у вас была кодировка cp1251, а потом вы перевели на utf-8.

  9. Игорь говорит:

    Подтверждаю, проблема решилась сменой опции output_buffering в On. Хотя другой проект исправно работал при такой конфигурации PHP.ini.
    В любом случае, спасибо

  10. LUL говорит:

    Создатель сайта, а можешь немного затемнить фон либо сам шрифт? Серый шрифт на сером фоне сложно читается.)

  11. Игорь говорит:

    Спасибо, тоже парился. Ничего понять не мог. Забыл, что OpenServer переустанавливал.

    • softmaker говорит:

      Пожалуйста, Игорь! Рад, что статья помогла!

  12. Tony говорит:

    Редко пишу комменты но с этой проблемой мучился часа 3, проверял BOM и т.д. и не мог понять в чем дело, оказалось проблема в настройках PHP на сервере с «output_buffering = on».
    Огромное спасибо бро!

  13. Cila говорит:

    где и как написать этот output_buffering в On
    я чайник просто

Комментарии закрыты.