У меня странная ошибка, и я не уверен, как справиться с ней, не тратя слишком много времени. У меня есть метод в моем контроллере, который должен возвращать 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' .