В файле header.php выполняется вход на сайт. Файл подключается к остальным с помощью include_once. Файл сохранён в UTF-8 без BOM. На всех страницах возникает данная ошибка, но если зайти на header.php, то на нём не возникает ошибка. Что можно с этим сделать?
Скорей всего какой-то из модулей что то пишет в headers.
Если сказать грубо - сделайте в основном файле (который подключает всех) вывод контента (например echo $content;) после подключения всех файлов. А в подключаемых файлах соберите содержимое в переменную $content .= 'html code'.
Ещё, возможно, где-то выпала ошибка до вывода headers.
вы пытаетесь послать http-заголовки ответа после того как начали отправлять страницу браузеру. так как заголовки ответа должны идти до содержания html, отправить их невозможно
Ингвар Фон Бьёрк: Ну тут ситуация такая, что любой первый даже пробельный символ, отправленный браузеру посылает заголовки ответа и, собственно, этот первый символ. После добавить информацию в сессию, добавить куки, либо еще что-либо через заголовки невозможно.
Часто ситуация проявляется когда есть какой-нибудь warning или notice, который провоцирует веб-сервер начать отправлять контент страницы.
Не имея кода я не могу дать дельных советов по отладке. Любые теоретические советы влекут целые статьи рассказов где-что может быть, хотя работая с кодом, с опытом находишь такие места легко.
Ингвар Фон Бьёрк: добавление output_buffering = 4096 в php.ini разрешило ситуацию, это видимо я как то не правильно сохранял в UTF-8 без BOM. Есть ли ещё пути решения проблемы?
Ингвар Фон Бьёрк: Это хреновое решение ситуации. Как я и полагал, где то что-то печатается в output. А буфер до переполнения не отсылает это хозяйство. Советую тщательно посмотреть выдаваемый html в самом верху. Если это не пробельные символы, то могут быть видны артефакты. Или нотисы с ворнингами