Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Cannot send session cookie - headers already sent by ...
Форумы портала PHP.SU » PHP » Программирование на PHP » Cannot send session cookie - headers already sent by ...

Страниц (5): [1] 2 3 4 5 »
 

1. Champion - 15 Декабря, 2009 - 11:17:56 - перейти к сообщению
В связи с участившимися случаями этого заболевания, думаю, стоит написать небольшую инструкцию, как от этого лечиться. Ну, лекарство номер 1 - это Гугл и Яндекс, но кому лень анализировать многочисленные рутинные обсуждения этой проблемы, вот вам краткая памятка, которая все вопросы должна снимать.

Итак, у на появилась такая вещь:
Cannot send session cookie - headers already sent by (output started at script1.php:1 [ * ]) in script2.php on line 2 [ ** ]
Нам сообщают, что заголовки уже были посланы и больше нельзя. Заголовки могут встречаться только один раз в начале документа.
Написано на какой строке в каком скрипте начался вывод в браузер(отмечано пушистой звездочкой) и на какой строке мы попытались послать заголовок (отмечено 2 пушистыми звездочками).

После вывода информации в браузар слать заголовки нельзя. Остается только осмыслить, что такое вывод в браузер. Да-да, если вы это читаете, то вы это не осмыслили.
* команды вывода php (echo, print...)
* различные warnigs, notices, которые произошли в результате других операций в скрипте.
* ЛЮБЫЕ СИМВОЛЫ, расположенные до <?php. Это и пробелы, и энтеры, и невидимый символ BOM.

Википедия про BOM пишет:
Этот способ позволяет различать UTF-16LE и UTF-16BE, поскольку символа U+FFFE не существует. Также он иногда применяется для обозначения формата UTF-8, хотя к этому формату и неприменимо понятие порядка байтов. Файлы, следующие этому соглашению, начинаются с таких последовательностей байтов:

UTF-8
EF BB BF
UTF-16BE
FE FF
UTF-16LE
FF FE
UTF-32BE
00 00 FE FF
UTF-32LE
FF FE 00 00

Короче, скрипты, написанные в UTF-8 следует сохранять без BOM и во многих текстовых редакторах есть эта возможность. Всё.
2. Кирыч - 26 Января, 2011 - 21:11:10 - перейти к сообщению
СПАСИБО ОГРОМНОЕ Champion, У МЕНЯ И ПРАВДА ОКАЗАЛСЯ символ BOM.
тЫ НАСТОЯЩИЙ СПЕЦ...
3. maragon - 11 Февраля, 2011 - 12:02:08 - перейти к сообщению
Все лечится notepad++ ом)
- Помнится долго маялся в поиске траблы.
В итоге просто надо было поискать в меню нотепада (UTF-8 без БОМ)!
4. kvins - 27 Февраля, 2011 - 09:56:50 - перейти к сообщению
Champion ты забыл написать что такая же ошибка происходит с session start() ,header

у меня недавно была проблема как раз с header(LOCATION) эта функция у меня включалась аж в середине скрипта и иногда невозможно просто отделаться только вашим вариантом, зато мне подсказали что можно в php.ini включить output_buffering = on
и тогда скрипт вызывается где угодно
(Добавление)
maragon пишет:
Все лечится notepad++ ом)
- Помнится долго маялся в поиске траблы.
В итоге просто надо было поискать в меню нотепада (UTF-8 без БОМ)!


не согласен Радость если б все так просто было
5. ALEN - 27 Февраля, 2011 - 12:20:50 - перейти к сообщению
kvins
Все действительно просто, и новичкам противопоказано вообще использовать навороченные редакторы по PHP , в винде действительно лучше чем notepad2 (++) ничего не найти
6. kvins - 27 Февраля, 2011 - 13:38:47 - перейти к сообщению
ну лечится же не notepad om а знаниями применнеными с помощью программы =)
7. CTAPbIu_KODEP - 28 Февраля, 2011 - 20:12:49 - перейти к сообщению
оооо. точно начало работать.. Радость
8. ALEN - 28 Февраля, 2011 - 20:51:17 - перейти к сообщению
kvins
Знания это да! Но в обычном блокноте кодировку не заменишь )))
9. Rocky - 03 Апреля, 2011 - 19:12:14 - перейти к сообщению
Я новичок в программировании, сразу извините за оффтоп:

в процесе изучения php дошёл к функции setcookie()

в текстовом редакторе notepad++ набрал:
<?php
setcookie("test","test");
?>

результатом была ошыбка:Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\site\cookie.php:1) in Z:\home\localhost\www\site\cookie.php on line 2

попробовал все вышеперечисленные советы-не помогло Огорчение
10. Champion - 03 Апреля, 2011 - 19:14:06 - перейти к сообщению
не правда. Давай файл.
11. Rocky - 03 Апреля, 2011 - 20:31:59 - перейти к сообщению
фух разобрался Улыбка
инструкции для таких же чайников как я ,если у вас стоит notepad++:
1) если Вы только собераетесь писать код,перед тем как создать файл для роботы-жмем вкладку Опции-Настройки-Новый Документ выбираем UTF-8 без метки BOM.
2)если код уже написан - жмем вкладку Кодировки-Преобразовать в UTF-8 без BOM.
12. OrmaJever - 03 Апреля, 2011 - 20:46:47 - перейти к сообщению
Rocky это написано в первом посте. Нужно внимательнее читать!
13. Haron - 05 Апреля, 2011 - 18:25:19 - перейти к сообщению
Я сталкивался с такой проблемой:
На Windows-серверах - всё нормально.
На *nix-серверах - вываливается этот самый Headers Already Sent

Проблему решил так:
- Перегнал все скрипты в utf-8 (без BOM)
- Затем удолил в конце скриптов символы ?>

Помогло.

Однако, возник вопрос:
А чем может в отношении описаной ошибки - отличаться винда от никсов?
14. IgVlGr - 05 Апреля, 2011 - 20:52:34 - перейти к сообщению
А почему нельзя так?!:

<?ob_start();

......всякая хрень...

ob_end_flush();
?>
15. rsd - 23 Апреля, 2011 - 13:36:35 - перейти к сообщению
спасибо за разъяснение .
такая же проблема с session_start();

гуглил и тоже нашел инфу про заголовки и пробелы после<?php

но про БОМ ничего не говорилось. сейчас перекодировал в ютф без бом и все ок сразу стало.

 

Powered by ExBB FM 1.0 RC1