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

Ошибка Headers
image_pdfimage_print

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

<?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, то вначале файла всегда выводятся три символа, вот и возникает эта ошибка.


Этот блог читают уже много людей
- читай и ТЫ!

20 ответы
  1. LAU
    LAU says:

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

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

    Ответить
  2. Вячеслав
    Вячеслав says:

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

    Ответить
  3. Николай
    Николай says:

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

    Ответить
  4. даниил
    даниил says:

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

    Ответить
  5. Fara
    Fara says:

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

    Ответить
  6. Andrew
    Andrew says:

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

    Ответить
    • softmaker
      softmaker says:

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

      Ответить
  7. Игорь
    Игорь says:

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

    Ответить

Ответить

Want to join the discussion?
Feel free to contribute!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *