Помимо пробелов, что еще может вызвать ошибки "заголовки уже отправлены" в PHP - PullRequest
0 голосов
/ 03 апреля 2012

Это уже отправленный заголовок вопрос, но у меня проблема в том, что у меня есть скрипт, который я запускаю локально (easyPHP на Win) и на моем живом сервере (LAMP).

Это прекрасно работает как наЯ не получаю ошибку заголовка.

Теперь у меня есть клиент, который запускает его на своем сервере, и он получает ошибку заголовка.

Я почти уверен, что проблема в одном из файлов(Я только что отправил ему один без строк разрыва после "?>" - это может быть проблемой, верно?), Но я понятия не имею, почему он получает ошибку, но я не - даже с пробелами после "?>"(да, мои сообщения об ошибках включены)

Есть ли что-то кроме пробелов, которые могут вызвать эту ошибку?

Быстрое редактирование, прочитав вопрос, связанный ниже

Первая ошибка:

<b>Warning</b>:  session_regenerate_id() [<a href='function.session-regenerate-id'>function.session-regenerate-id</a>]: Cannot regenerate session id - headers already sent in <b>bla bla bla/includes/lightwork_session.php</b> on line <b>33</b><br />

Строка 33 в "lightwork_session": Я не думаю, что это проблема

public static function sessionStart(){
//regenerate the session id to prevent session fixation
session_regenerate_id(true); //hello, I'm line 33
session_start(); //hello again, I'm line 34 in

}

Следующая партия ошибок:

  <b>Warning</b>:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at bla bla blaconfig/config_global.php:167) in <b>bla bla bla/includes/lightwork_session.php</b> on line <b>34</b><br />
<br />

<b>Warning</b>:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at bla bla bla/config/config_global.php:167) in <b>bla bla bla/includes/lightwork_session.php</b> on line <b>34</b><br />

Хорошо, строка 167 в config_global.php - это пробел сразу после "?>"

Я отправил ему файл без пробелов, но, находясь на другом конце света, завтра я узнаю, как это сработает для него.Но я в тупик, почему он получает ошибку, а я нет?

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

В дополнение к @davidethell, я хотел бы добавить, что также возможно, что ошибка вызвана типами разрывов строк или сигнатурами Unicode. Это опция во многих IDE и других редакторах (см., Например, «Новый документ» и «Формат кода» в Dreamweaver). Чтобы быть в безопасности, всегда выбирайте типы разрывов строк в стиле Unix (LF вместо CR LF) и не включайте подпись Unicode (BOM).

Кроме того, общий совет при работе с большими файлами PHP: вам не нужно включать закрывающий тег ?>. CodeIgniter, например, применил эту практику, они просто «закрывают» свои файлы с комментарием, это предотвращает случайные пробелы после закрывающего тега php.

1 голос
/ 03 апреля 2012

Пробел после закрывающего тега - это одна проблема, но другая распространенная причина, по которой это происходит, связана с тем, что предупреждения и уведомления PHP были переведены на более высокий уровень отчетности на его сервере. Если у вас есть какие-либо предупреждения или уведомления от PHP, которые будут распечатаны, это вызовет предупреждение заголовков. Вы должны отключить уведомления на его сервере, используя:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

или иметь только ошибки:

error_reporting(E_ERROR);

Я бы рекомендовал оставить E_WARNING включенным и исправить обнаруженные проблемы, но, по крайней мере, он сообщит вам, если это проблема.

0 голосов
/ 03 апреля 2012

В некоторых случаях это может быть следующим:

  1. Пробелы перед открывающим тегом php <?php
  2. Отправка чего-либо в браузер перед использованием session_start , header , setcookie и т.д ..
  3. UTF BOM (метка порядка следования байтов) ..

Если вы хотите быстро исправить ..... взгляните на ob_start () в PHP .... хотя использование ob_start для подавления ошибок такого рода является временным механизмом.

Надеюсь, это поможет ..

...