Cannot send session cache limiter headers already sent как исправить
Перейти к содержимому

Cannot send session cache limiter headers already sent как исправить

  • автор:

Cannot send session cache limiter — headers already sent

Если коротко, то сессию надо стартовать до любого вывода в скрипте. Если это не помогает — проверить, чтобы файл был сохранён в кодировке «utf-8 без BOM».

Подробнее см. по ссылке выше

Не нашли ответ на свой вопрос?

Смотри также

  • Сессии. Подробное описание работы и объяснение механизма.
  • Cannot send session cache limiter — headers already sent
Последние комментарии
  • 23.12.23 11:59 DeaA)))»(.,’..
    В помощь начинающему:
    SAZN
    read more
  • 23.12.23 11:59 DeaA)))»(.,’..
    В помощь начинающему:
    SAZN
    read more
  • 23.12.23 11:59 DeaA)))»(.,’..
    В помощь начинающему:
    SAZN
    read more
  • 23.12.23 11:59 DeaA)))»(.,’..
    В помощь начинающему:
    SAZN
    read more
  • 23.12.23 11:59 DeaA)))»(.,’..
    В помощь начинающему:
    SAZN
    read more

Написать комментарий

Пожалуйста, воздержитесь от посылки спама.
Сообщения, содержащие гиперссылки, проходят премодерацию.

Проблема с сессией: Cannot send session cache limiter — headers already sent

Эти файлы подключаются к каждой странице сайта. А страницы разбиты по категориям в которых нет ошибки сессии:

  • index.php
  • shopingcart.php
  • contact.php

И файлы в которых ошибка возникает:

  • faqs.php
  • productdetail.php
  • checkout.php

Как можно побороть ошибку данную?

Warning: session_start() [function.session-start]: Cannot send session cache limiter — headers already sent (output started at S:\home\localhost\www\web_shop\faqs.php:1) in S:\home\localhost\www\web_shop\config.php on line 2

Отслеживать
2,969 3 3 золотых знака 15 15 серебряных знаков 30 30 бронзовых знаков
задан 26 авг 2013 в 9:14
IntegralAL IntegralAL
2,689 5 5 золотых знаков 60 60 серебряных знаков 105 105 бронзовых знаков

Файлы которые как вы указали содержат ошибку — уберите из них session_start() т.к. он уже был вызван в конфиге

26 авг 2013 в 9:20

дело в том, что в них нету session_start(). Есть только один session_start() в конфиге, и каждый ошибочный файл ругается на него, так все подключают конфиг на первой строчке кода.

26 авг 2013 в 9:24

я и так подключаю конфиг самой первой строкой в файлах, только в одних нет ошибки, а в других она возникает. Меня смущает избирательность ошибки, с чем она связанна?

26 авг 2013 в 9:26
Файлы в которых возникает ошибка сохраните в кодировке UTF8 без BOM, если конечно используете UTF
26 авг 2013 в 9:28
Ответом ниже верный ответ.
26 авг 2013 в 9:30

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Ошибка говорит о том, что функция не может установить заголовки ответа HTTP, так как уже был вывод данных в тело ответа.
Функция header (которую в свою очередь вызывает session_start) может использоваться только до вывода тела ответа.
Чтобы исправить ошибку разместите подключение config.php в самом начале текста файла.
Если это не помогло или так и есть уже, то пересохраните файл без BOM.

Отслеживать
ответ дан 26 авг 2013 в 9:21
17.9k 3 3 золотых знака 46 46 серебряных знаков 86 86 бронзовых знаков

Согласен, неверно прочел ошибку.. про бом поясните человеку, я с трудом понял о чем вы(символы до <. ) если я верно понял.

26 авг 2013 в 9:29
26 авг 2013 в 9:34

Конфиг у меня подключается первым к файлу header.php, а тот в свою очередь стоит на первой строке всех файлов. И все файлы у меня и так без BOM. Причем тут BOM не пойму?

26 авг 2013 в 9:39

как я и думал.. все верно вам сказали, скрин 88.198.134.41/faqs.jpg Ошибку красным обвел, исправляйте, точнее удаляйте лишний символ и радуйтесь рабочим скриптам

Опасная ошибка: headers already sent

Сегодня я хочу рассказать вам об одной очень популярной и загадочной ошибке. Наверняка, многие из вас во время отладки своих программ сталкивались со следующим сообщением: headers already sent. Переводится на русский язык данная запись как «заголовки уже отправлены».

Чтобы понять суть этой ошибки, давайте вспомним структуру http-пакетов:

  1. Стартовая строка — определяет тип сообщения;
  2. Заголовки — характеризуют тело сообщения, параметры передачи и прочие сведения;
  3. Тело сообщения — непосредственно данные сообщения.

Т.е. говоря headers already sent программа ругает нас, за то, что мы уже где-то начали формировать тело сообщения (3-ю часть http-пакета), но снова хотим отправить заголовки (2-ую часть).

Приведу пару примеров: лёгкий и адский – с точки зрения возможности заметить ошибку.

Пример 1 – лёгкий.

//Получаем что-то из массива $_GET $id = $_GET[‘id’]; //Делаем отладочный вывод echo $id; // Стартуем сессию session_start(); //И дальше много php и html, работающего правильно. 

Будет выведена ошибка:

Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent

Мы не имели права вызывать функцию session_start(), после использования оператора echo. Такую ошибку исправить несложно – уберите отладочное echo.

Пример 2 – жуткий.

Представим, что у нас есть абстрактный файл модели model.php, который мы подключаем на нужную нам страничку a.php.

//Подключаем какой-то модуль include_once('model.php'); // Стартуем сессию session_start(); //И дальше много php и html, работающего правильно. 

Но неожиданно денвер снова говорит:

Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent

Как? Почему? Ведь мы ещё не начинали формирования тела сообщения! И вот здесь, прежде чем удастся найти ошибку, можно расколотить компьютер или удалить локальный сервер. А всё приключилось потому, что мы нарушили золотое правило – никогда не закрывайте блок php, если в конкретном файле после него не идёт html.

Давайте взглянем на файл модели:

И оказывается, что мы всего-то навсего случайно поставили пробел после закрывающего ?>… Ненаходимая ошибка, этот пробел невозможно было и представить себе. Как же с этим бороться? А очень просто – не пишите закрывающее ?> в файлах с чистым php-кодом, и всё будет в порядке.

Также важно понимать, что речь идёт не только о конкретной функции session_start, но и обо всех остальных, которые выполняют отправку заголовков, например: setcookie, header итд.

  1. Не забывайте о том, что нельзя отправлять заголовки после того, как началось формирование тела сообщения
  2. Не пишите закрывающее ?> в файлах с чистым php

И об ошибке headers already sent Вы забудете!

Понравился материал? Поделись с друзьями!

Как исправить ошибку «Cannot send session cache limiter»?

Собсна при загрузке главной страницы сразу выскакивает данная ошибка :

Warning: session_start() [function.session-start]: Cannot send session cache limiter — headers already sent (output started at C:\OpenServer\domains\localhost\phpMyAdmin\HunterDiscoBar\index.php:1) in C:\OpenServer\domains\localhost\phpMyAdmin\HunterDiscoBar\index.php on line 2

  • Вопрос задан более трёх лет назад
  • 6679 просмотров

Комментировать
Решения вопроса 1

headers already sent. Что переводится, как «Заголовки уже отправлены». Для запуска сессии, php выставляет куку на клиенте. Cookies устанавливаются с помощью отправки соответствующих заголовков. И, если заголовки были отправлены ранее, то возникает такая ошибка. Для того, чтобы решить эту «проблему», необходимо проверить, есть ли где-то в коде (до этого места) вывод данных. Это может быть echo, или же вообще, пустая строка перед открывающимся тэгом

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

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