
Я использую Xampp, который по сути является настройкой LAMP, но для Windows. Я использовал его много лет без проблем, и вдруг все страницы моих сайтов, которые используют сессии PHP, теперь выдают такие ошибки...
Предупреждение: session_start() [function.session-start]: Невозможно отправить ограничитель кэша сеанса — заголовки уже отправлены (вывод начался в C:\webserver\htdocs\friendproject2\labs\2.php:1) в C:\webserver\htdocs\friendproject2\labs\2.php в строке 3
Я понимаю, что обычно это происходит по одной из двух причин.
- Если перед вызовом функции session_start() на экране выведены какие-либо пробелы, это иногда может приводить к возникновению этой ошибки.
- Если что-либо выводится на экран/в браузер до вызова session_start().
Теперь моя проблема в другом. До сегодняшнего вечера у меня были сотни файлов, которые использовали сеансы, и ни один из них не показывал ни одной из этих ошибок. Это не просто один файл, в котором я пропустил ошибку пользователя, это просто начало влиять на все мои файлы. Я не вносил никаких изменений в свой компьютер сегодня вечером или в последнее время, насколько я помню.
Что может быть причиной этого? Это сводит меня с ума, и никто, похоже, не знает, почему это началось. Я думаю, это связано с сервером
Я даже могу создать файл и поместить его в любую папку на моем веб-сервере, это будет простой файл, как этот bvelow, и он все равно выдаст ошибку, которую я показал выше...
<?PHP
session_start();
$_SESSION['test'] = 'test value';
echo $_SESSION['test'];
?>
решение1
Проверьте, все ли ваши файлы сохранены в кодировке UTF-8. Файлы в кодировке UTF-8 могут включать BOM (Byte Order Mark), чтобы отличить порядок байтов от старшего к младшему (big endian) и от младшего к старшему (little endian). PHP не понимает BOM, и когда он встречает его в начале файла, он предполагает, что имеет дело с данными, и отправляет их — к тому времени изменять заголовки уже поздно.
Решением будет убедиться, что вы сохраняете файлы как ANSI - настройте свою IDE/редактор
Надеюсь, поможет.
РЕДАКТИРОВАТЬ:
Если это так, у вас, вероятно, много файлов, которые нужно преобразовать. Вы можете попробовать использовать этот код оболочки bash, который использует iconv, чтобы сделать это за вас (адаптировано из :https://stackoverflow.com/questions/1182037/osx-change-file-encoding-iconv-recursive)
for files in /mydisk/myfolder/*.php
do
iconv -f UTF-8 -t ISO-8859-1 "$files" "${files%.php}"
done