Возможный дубликат:
«Предупреждение: заголовки уже отправлены» в PHP
Я попытался использовать перенос xampp lite на моем флеш-накопителе, чтобы я мог принести сервер в любом месте. Но при использовании xampp я всегда получаю сообщение об ошибке. Эта ошибка, в частности:
Warning: Cannot modify header information - headers already sent by (output started at /path/to/geeklog/public_html/blabla.php:581) in /path/to/geeklog/public_html/system/lib-blablab.php on line 180
Я не знаю, почему я получаю эту ошибку. Но когда я использую wampserver. Нет проблем. И я не получаю никаких ошибок. Что мне нужно сделать, чтобы решить эту проблему, когда я использую xampp. Есть ли переносная версия
Чтобы ваш уровень отчетности об ошибках был одинаковым в разных средах, вы можете установить его в своем приложении, используя error_reporting()
и ini_set('display_errors', 1)
Также проверьте свои .php-файлы для любых пробелов перед открывающим тегом и после закрывающего тега.
В дополнение к указанным выше пунктам убедитесь, что вы не выдаете ничего перед установкой заголовков, например, следующий код приведет к ошибке, аналогичной той, которую вы получаете:
echo 'Hello, World'; header('Location: http://www.somesite.com');
Возможно ли, что есть немного бит-бит пробелов вне тегов PHP в строке blabla.php 581? Держу пари, что есть.
Смотрите, если у вас есть что-либо за пределами PHP-тегов, которое отправляется в браузер. И как только что-то было отправлено в браузер, вы больше не можете отправлять заголовки (например, cookie sessionID!).
Проблема, скорее всего, не XAMPP, а ваш PHP-код, когда вы положили его на флешку.
Разница, которую вы видите между средами, почти наверняка является разницей в конфигурации.
Одна из двух вещей происходит на сервере, который не выделяет предупреждения:
1) Буферизация вывода включена по умолчанию
2) error_reporting и / или display_errors установлены так, что вы просто не видите предупреждения. Но если это так, ваши заголовки все равно не будут установлены, так что это, вероятно, № 1
Вы можете проверить эти параметры, просмотрев вывод phpinfo()
Буферизация вывода, когда включена, буферизует любой вывод (обычный контент не внутри тегов, все, что вы эхо или печатаете () и т. Д.) На сервере, а затем отправляет его клиенту одним выстрелом.
Я бы выкарабкался в вашей портативной версии, нашел php.ini и попытался включить буферизацию вывода. Кроме того, вы можете включить буферизацию вывода во время выполнения, придерживаясь ob_start()
в верхней части вашего скрипта.
Ошибка указывает: output started at /path/to/geeklog/public_html/blabla.php:581
, поэтому я бы начал там. Вам нужно отправить все заголовки, прежде чем выводить что-либо, это включает пробелы, как упоминалось здесь другими.