Как уже говорили другие, вы должны отправлять заголовки (т.е. использовать header()
) перед любым другим выводом.
Одна вещь, которая часто может случиться, это то, что иногда вы включаете файлы, в которых случайно появляются символы новой строки после закрывающего тега PHP. например,
<?php
/*
* This is a file of PHP code
*/
/*
* file ends here
*/
?>
__________________________ (actual end of file)
# unexpected newline above gets sent as output
Чтобы уменьшить вероятность этого, вы можете сознательно не использовать закрывающий тег PHP. Файл будет анализироваться как PHP до конца, поэтому вероятность появления ложных символов новой строки или пробелов из включенного файла гораздо ниже.
В зависимости от вашего редактора вы также можете настроить его на отображение пробелов (возврат каретки, пробелы, табуляции), что может помочь при попытке устранить непредвиденный вывод из ваших скриптов (например, Eclipse и Notepad ++ могут это делать).