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-пакетов:
- Стартовая строка — определяет тип сообщения;
- Заголовки — характеризуют тело сообщения, параметры передачи и прочие сведения;
- Тело сообщения — непосредственно данные сообщения.
Т.е. говоря 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 итд.
- Не забывайте о том, что нельзя отправлять заголовки после того, как началось формирование тела сообщения
- Не пишите закрывающее ?> в файлах с чистым 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, или же вообще, пустая строка перед открывающимся тэгом