2013-02-12 4 views
8

У меня есть VPS от 1 & 1 с CentOS 5.2 64-бит.PHP выплескивает новую строку перед любым выходом

В прошлый вторник я обновил PHP и установил ImageMagick, которому пришлось обновить многие другие пакеты, в том числе Apache, MySQL, Perl и т. Д. Многие вещи были обновлены в процессе, но, будучи полным noob, я просто пошел с ним.

Теперь проблема заключается в том, что все веб-сайты выглядеть следующим образом:

1. 
2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd"> 

(новая линия на каждом PHP файла перед выходом)

Я даже попытался ob_start(); и die(trim(ob_get_clean())); не повезло. Новая линия продолжает сохраняться.

Я коротко проверил /etc/php.ini, ничего не выделяясь.

Что я могу сделать?

+0

И как выглядит одна из ваших страниц PHP? – Jon

+0

Я думаю, его спецификация? – 2013-02-12 05:31:35

+0

Это не делается локально. Работала очень хорошо перед обновлением. Это не спецификация, я просто попробовал «header» («Content-type: text/html; charset = utf-8»), «ничего хорошего. Проблема все еще здесь. –

ответ

6

Выстрел в темноте, но проверьте ваш php.ini за значение auto-prepend-file. Это может указывать на пустой файл по умолчанию, который имеет разрыв строки.

+0

возможно один файл включен ... – 2013-02-12 05:40:50

+0

Только что проверено '/ etc/php.ini', у меня есть'; auto_append_file = 'и'; auto_prepend_file = 'оба закомментированы. :( –

+1

+1 для тех директив ini, я забыл, что эти хитрые ребята были там. Я также мог увидеть некоторый подлый плагин/обновление, используя его, чтобы сделать свой код «globablly» доступным. –

3

Наиболее вероятной причиной этого является некоторый базовый файл с пробелом в конце его. Если какой-либо файл include имеет любые символы, находящиеся за пределами тегов <?php и ?>, включая разрывы строк или пробелы, тогда apache напишет пустую строку в начале ответа, как вы видите.

К сожалению, любой файл в вашей цепочке включения может быть виновником. Если вы используете хостинг-провайдера, вам может потребоваться связаться со службой поддержки, чтобы убедиться, что у них нет какого-либо wacky php auto-include поведения или директив apache, как упоминает AlienWebguy. Вот хороший вопрос о переполнении стека о best practices for include files. (Он даже указывает, что Smarty, сторонний плагин php templating имел запасные пробелы в своих включенных файлах, даже в последних версиях последних версий.)

И вот вероятная статья о том, как find and kill pages with whitespace on them. Если ваш * nix-fu достаточно силен, вы можете grep вашу файловую структуру с помощью регулярного выражения, чтобы попытаться найти любого такого преступника. Профилактически, Марио в вопросе SO связывает сообщения с несколькими директивами php, которые могут предупредить об этом, что может быть брошено в крюк фиксации svn, чтобы поймать любые такие будущие ошибки.

+0

Кажется, что это произошло только после его обновления. – AlienWebguy

+0

И виновником может быть любой из новых файлов, которые были установлены или изменены. –

+0

У меня SVN на сервере, но ни один из моих PHP не заканчивается на '?> '. Я только что установил ruby ​​и выполнил эту команду для подтверждения. (только некоторые админ-области были) Я не на хостинге, это VPS. –

Смежные вопросы