Super Member
Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009
Откуда: Днепропетровск
Репутация: 69
|
diocdicoc пишет:Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\n\f\include\lib.php:40) in Z:\home\localhost\www\n\f\loginout.php on line 67
Такая ошибка возникает при попытке установить заголовки веб-страницы после начала вывода.
В 99% случаев ошибка из-за того, что:
а) Отправка основного содержания уже началась, т.к. перед тегом <?php вставлена пустая строка или пробел.
А все, что перед <?php - интерпретируется как HTML-код основного содержания
б) В начале файла подключается другой файл, в котором идет отправка основного содержания либо явно (функциями echo или print), либо неявно, как в предыдущем варианте с пробелом или пустой строкой
Так что надо проверить все файлы, в т.ч. подключаемые, на наличие таких пробелов или пустых строк перед началом кода PHP
в) Почти вариант а), но такой, что заметить этот дополнительный пробел крайне сложно. Дело в том, что свой файл PHP вы можете создать в кодировке UTF-8, и некоторые редакторы кода в начало файла запишут дополнительный специальный символ, идентификатор UTF-8 (BOM - byte order mark). В редакторе он отображаться не будет, а вот сервер, который будет обрабатывать этот файл, может его принять просто за одиночный символ и вывести его сразу после заголовков. Этот символ тоже может вообще никак не отобразиться в браузере, но если посмотреть исходный код страницы, можно увидеть дополнительный отступ или знак "?" перед основным содержимым (обычно перед тегом BODY) Соответственно, если такой символ выводится, а в файле есть функция Header(), то это и приведет к появлению ошибки Cannot modify header information - headers already sent by. Увидеть этот символ, в виде знака ?, квадратика или пробела можно, открыв файл в обычном блокноте. Чтобы избавиться от этой проблемы, в настройках своего редактора PHP найдите и отключите вставку этого идентификатора.
Оставшийся 1% случаев - это неправильные настройки сервера или PHP интерпретатора. Скорее всего вы с этим вряд ли столкнетесь. |