Мой PHP-сервер внезапно выдает ошибки сеанса

Мой PHP-сервер внезапно выдает ошибки сеанса

Я использую 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

Я понимаю, что обычно это происходит по одной из двух причин.

  1. Если перед вызовом функции session_start() на экране выведены какие-либо пробелы, это иногда может приводить к возникновению этой ошибки.
  2. Если что-либо выводится на экран/в браузер до вызова 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

Связанный контент