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

Ответили на вопрос 2 человека. Оцените лучшие ответы! И подпишитесь на вопрос, чтобы узнавать о появлении новых ответов.

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

Warning: session_start() [function.session-start]: Cannot send session cache limiter — headers already sent (output started at C:OpenServerdomainslocalhostphpMyAdminHunterDiscoBarindex.php:1) in C:OpenServerdomainslocalhostphpMyAdminHunterDiscoBarindex.php on line 2

Имеется только

<?php
session_start();
?>


  • Вопрос задан

    более трёх лет назад

  • 6134 просмотра

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

Пригласить эксперта

Текстовый редактор показывал кодировку UTF- 8 not BOM. Поменял на UTF-8, затем обратно сменил на UTF- 8 not BOM и все заработало.


  • Показать ещё
    Загружается…

09 февр. 2023, в 11:23

1500 руб./за проект

09 февр. 2023, в 10:11

1500 руб./в час

09 февр. 2023, в 09:28

5000 руб./за проект

Минуточку внимания

Подскажите, пожалуйста. Как исправить такую ошибку?

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/u22691/domains/pokess.u-gu.ru/public_html/game/fight.php:1) in /home/u22691/domains/pokess.u-gu.ru/public_html/game/fight.php on line 2

Nicolas Chabanovsky's user avatar

задан 29 фев 2012 в 10:05

oOKomarOo's user avatar

oOKomarOooOKomarOo

4881 золотой знак11 серебряных знаков34 бронзовых знака

1

Видимо файл сохранен в кодировке utf-8 with bom, сохраняйте без bom.

ответ дан 29 фев 2012 в 11:09

tranceman's user avatar

2

headers already sent

Ну блин почти же по-русски написано link

Перед session_start() не должно быть никакого вывода на экран, даже пробела.

ответ дан 29 фев 2012 в 10:09

DemoS's user avatar

DemoSDemoS

3,94118 серебряных знаков41 бронзовый знак

2

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

ответ дан 29 фев 2012 в 12:27

kira's user avatar

kirakira

1937 серебряных знаков25 бронзовых знаков

типичная ошибка следующая:

<? 
код php
?>

и вот тут после ?> стоит любой символ. Из-за этого PHP сразу выдаст header
И причем, эту ошибку легко пропустить, если есть include, где такая штука произошла.
Поэтому, лучше закрывающий ?> не писать, если у вас после него ничего нет.

ответ дан 10 мар 2012 в 11:01

Cooleronline's user avatar

CooleronlineCooleronline

3441 серебряный знак6 бронзовых знаков

Проблема может быть не столь очевидна, если ты программируешь классами. Например ты описываешь
session_start() в главном файле с родительским классом. Там у тебя всё правильно написано: никаких выводов, никаких пробелов до начала сесии. Но при входе на сайт у тебя запускается файл потомок, то-есть почти всегда index.php. В тексте ошибки написана ссылка на ту строку, где объявлено начало сесии но проблема может быть и во всех файлах к которым ты подключаешь
родительский класс с вызовом session_start(). Поэтому во всех файлах где есть присоединение например чтото вроде этого

require_once($_SERVER['DOCUMENT_ROOT'] . '/admin/'файл с session_start() функцией'.php');
class index extends название класса

Так вот до этих 2 строчек во всех файлах ничего не должно выводится. А вот после них — вполне возможно.

Deleted's user avatar

Deleted

3611 золотой знак5 серебряных знаков13 бронзовых знаков

ответ дан 19 июн 2013 в 7:02

vano's user avatar

vanovano

192 бронзовых знака

Проблема может быть и в следующем случае.

К примеру форма на php встроена в HTML. Работает, всё нормально. далее что либо добавляете в HTML . . . и приехали, вылетает сообщение. Ни один из вариантов вверху не помогает, ни с сохранением без ВОМ, ничего . . . это происходит из — за разницы в кодировке текста, который добавляете при помощи копипаст . . . Любые попытки сохранения итогового текста в UTF-8 либо в ANSI не приведут к нормальной работе скрипта.

Выход — рабочий вариант странички с формой на php открываете в текстовом редакторе и вносите изменения вручную. Затем просто сохраняете без функции сохранить как! Всё будет работать без ошибок. Извиняюсь за слишком подробный мануал.

ответ дан 20 ноя 2020 в 8:29

Igor Savch's user avatar

1

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

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

30.06.2010//



https://site.softmaker.kz/wp-content/uploads/2010/06/ErrorMethodHeaders.jpg
300
450


softmaker

https://site.softmaker.kz/wp-content/uploads/2015/11/icon_site_shadow.png

softmaker2010-06-30 00:00:002021-06-06 14:45:37Почему в PHP выдается ошибка: Cannot send session cache limiter — headers already sent?

Have you ever had trouble with the session start of PHP? For example, when you started a session on a particular page, did you get the error: Warning: session_start(): cannot send session cache limiter – headers already sent before? Actually, the error means that some data has been already sent to the server and you are not able to send the header anymore.

If you are seeking some solutions to solve this trouble, we would like to show you some suggested methods that help other users successfully fix it. So, now, let’s start!

Warning: Session_Start(): Cannot Send Session Cache Limiter - Headers Already Sent

Here are some ways you should try one by one to find the most useful one.

  • Solution 1: Check out the code and make sure that the
    <?php
    is the first character. That means there is no space or tab before.
  • Solution 2: Put the code
    <?php session_start(); ?>
    above all other code.
  • Solution 3: Change the encoding of the document from UTF-8 to ANSI. Or you can use UTF-8 encoding without BOM (Byte Oder Mark) by ensuring that you don’t use notepad.exe to edit or save the files since it will insert UTF-8 BOM.

Conclusion

All in all, we have already shared with you the three methods to fix this common error: Warning: session_start(): cannot send session cache limiter – headers already sent. Therefore, we hope that it will be useful for you. If you have more ideas to address this trouble, don’t hesitate to let us know by leaving your comment below.

Furthermore, if you are using WordPress or Joomla and want to change the appearance of your site, let’s have a look at the collection of Free WordPress Themes as well as Joomla 4 Templates here. Thanks for your attention and have a wonderful day.

  • Author
  • Recent Posts

Lt Digital Team (Content &Amp; Marketing)

Welcome to LT Digital Team, we’re small team with 5 digital content marketers. We make daily blogs for Joomla! and WordPress CMS, support customers and everyone who has issues with these CMSs and solve any issues with blog instruction posts, trusted by over 1.5 million readers worldwide.

Lt Digital Team (Content &Amp; Marketing)

Pete Boyd portrait

By Peter Boyd on June 14, 2009 in

Development 

We recently came across this pesky problem and found these two articles very helpful.

Don’t save your UTF-8 files with BOM as it creates issues.

=================

http://juicystudio.com/article/utf-byte-order-mark.php

“Headers must be written before any data is sent to the client. Unicode files may include a Byte-Order Mark (BOM) to help distinguish the big endian and little endian byte order. Unfortunately, the BOM isn’t understood by PHP. Upon encountering the BOM, PHP assumes that it is dealing with data, by which time it’s too late to modify headers. Solution? Save the file in UTF-8 encoding without a BOM.”

and

http://69.147.83.196/bug.php?id=44563&edit=2

“If file A or file B has UTF-8 encoding then you will get the error:

Warning: session_start() [function.session-start]: Cannot send session
cache limiter – headers already sent (output started at index.php:1) in
session.php on line 3

Using UTF-8 encoding WITHOUT BOM (Byte Order Mark) seems to fix the
problem.”

=================

If file A or file B has UTF-8 encoding then you will get the error:

Warning: session_start() [function.session-start]: Cannot send session
cache limiter - headers already sent (output started at index.php:1) in
session.php on line 3

Using UTF-8 encoding WITHOUT BOM (Byte Order Mark) seems to fix the
problem.

Related Posts

Related Services

Ready to Take Your Website to the Next Level? Great Ideas & Results Only a Phone Call Away

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Let’s get started.

За последние 24 часа нас посетили 11585 программистов и 1163 робота. Сейчас ищут 268 программистов …

Страница 1 из 2


  1. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    Здравствуйте! Такая проблемка. На всех страницах сайта выскакивает одна и та же ошибка Warning: session_start() [function.session-start]: Cannot send session cache limiter — headers already sent…. с указанием на первую строку каждой страницы. Вот код:
    <?php session_start(); ?>
    <?php $tov=»SCR-218″; $cena=»844″ ?>
    <html>
    <head><meta http-equiv=»content-type» content=»text/html; charset=utf-8″>
    <meta name=»generator» content=»PSPad editor, http://www.pspad.com»><title></title>
    <link rel=»stylesheet» href=»style.css» type=»text/css» media=»screen, projection» />
    </head>
    <body>
    <?php include («header.php»); ?>
    <div id=»osn»>
    <?php include («menu.php»); ?>
    <div id=»centr»>….и т.д.
    Использую PSPad, все в кодировке utf-8. Как избавиться от этой ошибки?


  2. MiksIr

    MiksIr
    Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44

    Проверить что файл без BOM.


  3. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    То, что файл без BOM, я проверяла через notepad, пересохраняла в utf-8 без BOM. Но тогда съезжает кодировка на самих страницах, вместо русских букв выводит каракули какие-то. Приходится при переходе на новую страничку, каждый раз переставлять кодировку в мозиле вручную. Как тогда поступить?


  4. YSandro

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2

    Выводите ещё один заголовок в начале документа

    1. header(«Content-type: text/html; charset=utf-8»);


  5. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    В таком случае выводит следующую ошибку!
    Warning: Cannot modify header information — headers already sent by…


  6. YSandro

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2

    Да, так предсказуемо. Я даже проверил у себя, т.к. ожидал того же, но у меня почему-то сработало.
    А если поменять местами

    1. header(«Content-type: text/html; charset=utf-8»);

    проверьте, создаются ли сессии. А то у меня работает.
    Кстати, перепроверьте, чтобы точно не было BOM.


  7. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    Все тоже получается. А как правильно перепроверить, что нет ВОМ? Я просто пересохраняла в notepad: «преобразовать в utf-8 без ВОМ. может нужно по-другому делать! Как?


  8. smitt

    С нами с:
    3 янв 2012
    Сообщения:
    3.167
    Симпатии:
    65

    Разве будет съезжать кодировка если был UTF без BOM и пересохранить в UTF?
    Очень сомневаюсь… странно… редактор какой то стремный…


  9. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    Но съезжается же. Я пользуюсь PSPad.


  10. smitt

    С нами с:
    3 янв 2012
    Сообщения:
    3.167
    Симпатии:
    65

    Попробуйте открыть еще раз в notepad++ в нижнем правом углу какая кодировка?
    Может есть 1 файл в UTF BOM который ко всем подключается?
    Проверяли?


  11. artoodetoo

    Команда форума
    Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.827
    Симпатии:
    1.174
    Адрес:
    там-сям

    Избавляться надо от BOM, к гадалке не ходи!

    Кто сказал «notepad++»? Ксюха использует notepad без плюсов, который один сплошной минус. И еще какой-то хз-что-за-пад. качать правильный редактор


  12. YSandro

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2

    artoodetoo, в простом notepad нет такой опции «преобразовать в utf-8 без ВОМ», она именно в Notepad++.
    Так что скорей всего в индексном файле эти 3 байта или вообще пробелы.


  13. artoodetoo

    Команда форума
    Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.827
    Симпатии:
    1.174
    Адрес:
    там-сям

    пардон, он(а) писал(а) То, что файл без BOM, я проверяла через notepad


  14. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    Внизу в углу стоит такая надпись: ANSI as UTF-8. Не то что-то, да?

    Да, notepad++


  15. YSandro

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2

    То, верно. (Если с BOM, то было бы написано просто «UTF-8».)
    Вот этот код, что в первом посте, он в документе, который к чему-то подключается, к индексному файлу, например?


  16. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    Нет, тот код, что я писала в начале, это самостоятельная страничка, к ней подключаются файлы header.php и footer.php, они подключаются ко всем файлам, которые есть на сайте.


  17. YSandro

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2

    Вот попадос-то. Ну сохраните где-нибудь в файлообменнике или фтп, чтобы мы посмотрели. Если, конечно, там не конфиденциальная информация.


  18. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    Спасибо, пропустила видать( Сейчас пересохранила через notepad и полетела кодировка на этой странице(


  19. YSandro

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2

    Как же. Вот у вас

    , но это полбеды. В индексном файле создаётся (ну, должна создаваться) сессия с помощью session_start(). Зачем тогда пытаться ещё создавать сессии в инклудах header.php, menu.php, recl.php и даже в footer.php?!


  20. Ksuha000

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0

    даааа, сама уже видела! но теперь отображает хреново, по-крайней мере у меня! а у вас?


  21. YSandro

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2

    Давайте заново, проверьте индексный файл, добавьте

    1. header(«Content-type: text/html; charset=utf-8»); 

Страница 1 из 2

Здравствуйте, друзья!

Сегодня я хочу рассказать вам об одной очень популярной и загадочной ошибке. Наверняка, многие из вас во время отладки своих программ сталкивались со следующим сообщением: 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
  function sum($a, $b){
    return $a + $b;
  }
?> 

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

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

Резюме:

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

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

15.02.2015

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

Отредактировано: 04 Февраля 2019

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

Принцип работы сессий: сервер выдает браузеру уникальный идентификатор, и просит передавать его с каждым запросом. Передача происходит стандартными способами, либо через куки, либо через переменные POST/GET. 

Идентификатор сессии — это обычная переменная, по умолчанию ее имя — PHPSESSID. Можно изменить директивой session.name в php.ini.

На сервере за передачу информации о сессиях отвечают две настройки в php.ini:

  • session.use_cookies — если равно 1, то PHP передает идентификатор в куках, если 0 — то нет.
  • session.use_trans_sid — если равно 1, то PHP передает его, добавляя к URL и формам, если 0 — то нет.

Соответственно, если включена только первая настройка и браузер отдает куки, то идентификатор передается через них, если не отдает, то сессия обнуляется при каждом запросе.

Если включена только вторая, то PHP дописывает к каждой относительной ссылке и к каждой форме передачу идентификатора сессии, примерно так:

// в ссылках
<a href="/index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f">Index</a>

// в формах
<input type="hidden" name="PHPSESSID" value="00196c1c1a02e4c37ac04f921f4a5eec" />

Если включены обе, то браузеру выставляется кука, а ссылки и формы дополняются только если кука найдена не была.

Вся информация о сессии храниться в глобальном массиве $_SESSION.

Запись данных в сессию работает так:

// запускаем новую, либо возобновляем существующую сессию
session_start();

// передаем в массив сессий переменную с названием test и данными Hello world
$_SESSION['test']='Hello world!';

// если в качестве имени переменной хотим использовать значение переменной -
// пишем без кавычек или используем двойные 
$var = name;
$_SESSION["$var"]='Hello world!';

Используем например так:

// обычное условие проверки
if(!$_SESSION[$var]){
    echo "session variable is empty"
}

// можно получить id текущей сессии или ее имя
session_id(); 
session_name(); 

Удаление переменных из сессии:

unset($_SESSION[$var]);

// Если register_globals = on, надо добавить строку
session_unregister($var);

//Если надо сбросить все переменные сессии
session_unset();

Для закрытия сессии используется функция:

session_destroy()

Данные из глобального массива $_SESSION php хранит либо в файлах, путь к которым указывается в session.save_path в php.ini, либо в БД.

Для управления HTTP-заголовками отвечающими за кэш, используется функция session_cache_limiter(). Установка nocache, например, отменяет кэширование на стороне клиента.

Во время начала запроса режим кеширования сбрасывается до значения по умолчанию, хранящегося в session.cache_limiter. Таким образом, вам необходимо вызывать session_cache_limiter() для каждого запроса (перед тем, как вызвана функция session_start()).

Возможные значения:

Значение Посылаемый заголовок
public Expires: (когда-нибудь в будущем, в зависимости от session.cache_expire)
Cache-Control: public, max-age=(когда-нибудь в будущем, в зависимости от session.cache_expire)
Last-Modified: (временная метка последнего сохранения сессии)
private_no_expire Cache-Control: private, max-age=(session.cache_expire в будущем), pre-check=(session.cache_expire в будущем)
Last-Modified: (временная метка последнего сохранения сессии)
private Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private, max-age=(session.cache_expire в будущем), pre-check=(session.cache_expire в будущем)
Last-Modified: (временная метка последнего сохранения сессии)
nocache Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

Возможные проблемы

  • Вспомогательными вещами, вроде кодирования данных и удаления старых сессий, php занимается сам, и если возникает проблема с удалением информации о них, проверьте в php.ini строку session.gc_probability. Для того чтобы php мог самостоятельно удалять файлы сессий, должно быть установлено 1.
  • Warning: open(/tmpsess_SID, O_RDWR) failed: No such file or directory (2) in full_script_path on line number
    или
    Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp))
    в этом случае надо в php.ini, в параметре session.save_path, указать правильный каталог, который существует и доступен для записи (не забудьте перезагрузить апач).
  • Warning: Cannot send session cookie — headers already sent.
    Warning: Cannot send session cache limiter — headers already sent.
    Warning: Cannot add header information — headers already sent.
    эти ошибки возникают в том случае, если браузер ранее уже получил заголовки для страницы. Функции header(), session_start(), setcookie() и вся логика, которая их вызывает, должны обрабатываться до любого вывода в браузер.
  • Если давать переменным скрипта имена, совпадающие с индексами массива $_SESSION, возможны проблемы. При register_globals=on значения будут перезаписывать друг друга. При register_globals=off, в случае, если в скрипте есть переменная сессии не имеющая значения, и глобальная переменная с тем же именем, появится ошибка «Your script possibly relies on a session side-effect which existed until PHP 4.2.3.». Для предотвращения этой ошибки, надо инициализировать переменные перед использованием или проверять на существование, и стараться не давать глобальным переменным имена, совпадающие с индексами массива $_SESSION.
  • Если вы используете перенаправление через header или навигацию с помощью JavaScript, PHP не пропишет необходимый идентификатор, т.к. он работает только со статичными ссылками. В этом случае надо проставлять идентификатор самостоятельно: 
    header("Location: /script.php?".session_name().'='.session_id());
  • Если один скрипт стартует сессию и долго выполняется, а другой пытается в это время стартовать её с тем же идентификатором, то он зависнет. Поэтому в долго выполняющихся скриптах следует стартовать сессию только тогда, когда она нужна, и тут же закрывать её, с помощью session_write_close().

tnx

Более детальный обзор можно найти на сайте phpfaq.ru

  1. Home

  2. How to fix «Headers already sent» error in PHP

402 votes

13 answers

Get the solution ↓↓↓

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.


About the technologies asked in this question

PHP

PHP (from the English Hypertext Preprocessor — hypertext preprocessor) is a scripting programming language for developing web applications. Supported by most hosting providers, it is one of the most popular tools for creating dynamic websites.
The PHP scripting language has gained wide popularity due to its processing speed, simplicity, cross-platform, functionality and distribution of source codes under its own license.
https://www.php.net/

JavaScript

JavaScript is a multi-paradigm language that supports event-driven, functional, and mandatory (including object-oriented and prototype-based) programming types. Originally JavaScript was only used on the client side. JavaScript is now still used as a server-side programming language. To summarize, we can say that JavaScript is the language of the Internet.
https://www.javascript.com/

JQuery

JQuery is arguably the most popular JavaScript library with so many features for modern development. JQuery is a fast and concise JavaScript library created by John Resig in 2006. It is a cross-platform JavaScript library designed to simplify client-side HTML scripting. Over 19 million websites are currently using jQuery! Companies like WordPress, Facebook, Google, IBM and many more rely on jQuery to provide a kind of web browsing experience.
https://jquery.com/

HTML

HTML (English «hyper text markup language» — hypertext markup language) is a special markup language that is used to create sites on the Internet.
Browsers understand html perfectly and can interpret it in an understandable way. In general, any page on the site is html-code, which the browser translates into a user-friendly form. By the way, the code of any page is available to everyone.
https://www.w3.org/html/



Welcome to programmierfrage.com

programmierfrage.com is a question and answer site for professional web developers, programming enthusiasts and website builders. Site created and operated by the community. Together with you, we create a free library of detailed answers to any question on programming, web development, website creation and website administration.

Get answers to specific questions

Ask about the real problem you are facing. Describe in detail what you are doing and what you want to achieve.

Help Others Solve Their Issues

Our goal is to create a strong community in which everyone will support each other. If you find a question and know the answer to it, help others with your knowledge.

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

Читайте также:

  • Cannot retrieve record native error 10026
  • Cannot restore system mounted read only twrp как исправить
  • Cannot restore iphone error domain
  • Cannot resolve symbol string java ошибка
  • Cannot resolve symbol println как исправить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии