php: пустая строка из ниоткуда

У меня странная ошибка, и я не уверен, как справиться с ней, не тратя слишком много времени. У меня есть метод в моем контроллере, который должен возвращать xml, используя:

header("Content-type: text/xml"); header("Content-Disposition: attachment; filename=output.xml"); header("Pragma: no-cache"); header("Expires: 0"); 

дело в том, что вывод недопустим xml из-за пустой строки, и я понятия не имею, откуда он пришел, у вас есть идея, как это исправить? возможно, игнорировать эту пустую строку или что-то еще? Я не хочу отлаживать всю структуру … Я пытался использовать var_dump(debug_backtrace()) но я получаю один большой беспорядок, вероятно, из-за доктрины.

Почти всегда будет пустая строка до или после тэгов <?php ?> . Если нет в вашем основном файле, посмотрите на свои включенные.

Кроме того, небольшой совет … если ваш файл является чистым PHP, просто запустите его с помощью <?php и никогда не закрывайте тег PHP. Закрытие не нужно, а затем вы избегаете пустых строк в конце, что вызывает у вас проблемы.

Кроме того, любые сообщения об ошибках будут напечатаны в документе перед заголовками. но иногда трудно найти преступника, когда нет ошибки. Попробуй это:

 ob_start() 

Поместите это первое в своем скрипте, это гарантирует, что ничего не будет выводиться, пока вы не вызовете

 ob_flush() 

Это может быть не обязательно для вас (ob_flush).

Кроме того, у меня была эта проблема некоторое время назад, когда сценарий, который был включен в середине другого скрипта, имел один символ после закрывающего тега php, что заставило одного персонажа нажать на заголовки и сделать ответ недействительным.

Поэтому я буду следовать предложению Брэда о том, что вы не используете закрывающие теги php, если вам не нужно.

Используйте ob_clean() который очищает буфер, который имел нежелательную новую ob_clean()

У вас почти наверняка есть пустая строка где-то до или после ваших PHP-тегов. Один из способов исправить это – всегда exit или die() после вывода XML-файла. Это сократит любые дополнительные строки, которые могут быть у вас в конце вашего кода. Однако вам нужно убедиться, что в начале файла нет ни одного.

После обновления Plesk у меня был пустой файл /tmp/.tmp.err, который был автоакпирован с помощью auto_prepend_file в конфигурации php.

Таким образом, все PHP-скрипты были добавлены с пустой строкой. Некоторая уникальная ситуация, но, вероятно, может кому-то помочь.

Я сталкиваюсь с этим вопросом время от времени. И это может быть очень неприятно. 🙂 В любом случае – я нахожу это полезным. Это покажет файлы с пустой строкой, за которыми следует тэг начала php. Он будет показывать ложные срабатывания, но помогает значительно сократить поиск.

 pcregrep -Mron '\n\<\?php' .