FAQ draft. Any comments/corrections?
Warning: Cannot add header information - headers already sent by (output started at /www/script.php:5) on line 20
Для начала узнаем, как вообще общается броузер с сервером. Происходит это по специальному протоколу HTTP. К примеру, когда ты набраешь адрес, или нажимаешь на ссылку, броузер посылает HTTP запрос серверу. Сервер отвечает. Первыми в ответе ВСЕГДА идут HTTP заголовки. Хоть один. И только потом уже сервер посылает, а броузер принимает, текст, или картинку, или файл - в общем, что было запрошено. Cобственно, из-за этого правила - сначала заголовок, а потом информация, и происходит данная ошибка. РНР, для твоего удобства, посылает заголовки автоматически, как только скрипт начинает выдавать бровзеру информацию. Соответственно, если хоть один пробел был уже передан пользователю, заголовки уже ушли, и снова их послать уже никак не можно. А, как ты уже, наверное, догадался, команда header(), или setcookie, и некоторые другие, посылают HTTP заголовки.
Разберем теперь приведенное выше предупреждение.
Cannot add header information - headers already sent. Все ясно написано. "Не могу послать заголовок - поезд уже ушел" - пишет нам РНР. Дальше РНР сообщает, в каком скрипте и в какой его строке (output started at /www/script.php:5) произошел вывод информации, вызвавший автоматическую посылку заголовков. Очень легко найти и исправить. Может быть там html теги, моет быть, echo, а может и просто незамеченная пустая строка или пробел. Так вот сам hrader() и всю логику, которая его вызывает, надо поместить ДО любого вывода в броузер. просто перенести повыше в скрипте.