Возможный дубликат:
Заголовки, уже отправленные PHP
Ниже приведен простой пример моего PHP-кода, который (я надеюсь, что так) объясняет сам. Я пытаюсь обновить переменную сеанса. Но вывод скрипта выглядит следующим образом:
Предупреждение: session_start () [function.session-start]: не удается отправить файл cookie сеанса – уже отправленные заголовки (вывод запущен в /Library/WebServer/Documents/facebook/test.php:8) в / Library / WebServer / Documents / facebook /test.php в строке 11
Предупреждение вызвано сообщениями echo
в строках 8 и 9, конечно. Есть ли простое решение, чтобы остановить это предупреждение.
Спасибо за любые указатели, Андрей
<?php session_start(); $_SESSION['percent'] = 0; $iterations = 50; for ($i = 0; $i <= iterations; $i++) { $percent = ($i / $iterations) * 100; echo "Hello World!"; echo "<br />"; // update session variable session_start(); $_SESSION['percent'] = number_format($percent, 0, '', ''); session_commit(); } ?>
Единственное решение, которое работает (то есть обновляет переменную сеанса), для меня:
<?php ob_start(); session_start(); $_SESSION['percent'] = 0; $iterations = 50; for ($i = 0; $i <= 50; $i++) { $percent = ($i / $iterations) * 100; echo "Hello World!"; echo "<br />"; // update session variable session_start(); $_SESSION['percent'] = number_format($percent, 0, '', ''); session_commit(); } ob_flush(); ?>
Это уродливо, в то время как он сначала буферизует выход …
Невозможно установить файлы cookie (или отправить любые другие заголовки) после запуска выхода. Вы можете добавить ob_start () в строке 1 для буферизации вывода.
Правильное решение – отделить логику от выхода. Проверьте, например, http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=21
Удалите session_start () из цикла for.
Поместите session_commit () вне цикла for в самом конце.
Обе эти функции следует вызывать только один раз в скрипте.
Если у вас нет вывода previeus перед оператором session-start (), попробуйте перезагрузить ваш .php-файл как ansi-файл или как utf-8 без BOM-файла. это bc, в некоторых случаях сам редактор пишет вещи как результат в файле.
Это сработало для меня
Вы должны выполнить функцию session_start()
только один раз. Поэтому просто отбросьте один из них.
Также вам не нужно делать session_commit()
вручную, в большинстве случаев PHP обрабатывает это для вас автоматически.
Как утверждали другие, причиной ошибки является вторая session_start()
вы используете. Тем не менее, фактическая причина, по которой она вызывает ошибку, заключается в том, что вы пытаетесь установить заголовок после того, как вы уже отправили вывод. Поскольку функция session_start () задает куки-файл сеанса, она пыталась установить заголовок файла cookie, который уже после эхо-контента.