Подтвердить что ты не робот

Каковы аргументы в FAVOR PHP закрытия тегов для файлов только PHP?

В стандарте кодирования Zend Framework упоминается следующее:

Для файлов, содержащих только код PHP, закрывающий тег ( "? > " ) Никогда не разрешается. Он не требуется PHP, и его исключение предотвращает случайную инъекцию конечных пробелов в ответ.

Однако я помню, как слышал о проблеме (с инструментами или включая, может быть?), где файлы должны иметь закрывающий тег.

Кто-нибудь знает о каких-либо проблемах (кроме проблемы с разработчиком, требующей симметрии), где вам нужно будет закрывать теги или они вообще плохой идеей?

4b9b3361

Ответ 1

Удаление закрывающих тегов, когда вы можете, вероятно, является лучшей практикой. Причина в том, что если у вас есть какой-либо символ (даже пробел) за пределами?? В php файле, он может остановить такие вещи, как заголовки, чтобы перестать работать, если символ отправляется в браузер до того, как заголовок будет установлен.

Ответ 2

Если вы используете закрывающие теги PHP, вы можете легко найти файлы, которые были случайно усечены (например, не были загружены полностью).
Однако такая проблема должна быть устранена путем обеспечения надежной файловой системы и переносов, а не добавления тегов PHP "canary":)

Другая возможная причина заключается в том, что стандарты кодирования PEAR требуют этого. Они требуют этого, потому что они этого требуют, и вам не разрешается подвергать сомнению стандарты кодирования PEAR.

Ответ 3

Вы можете рассматривать тег открытия php для файлов только для php, как своего рода строку shebang (например, #!/bin/ bash). Таким образом вам не нужен закрывающий тег.

Мы также следуем стандарту ZF, не добавляя тега закрытия для файлов только для php. Но я никогда не слышал о каком-либо инструменте, который не смог бы проанализировать файл из-за отсутствующего закрывающего тега, и у меня пока не возникало никаких проблем, пока он не использовался.

Ответ 4

Я всегда пишу закрывающий тег для php файлов и целенаправленно не следую ему с пробелами или eol.

Стандарт подразумевает, что если закрывающий тег опущен, он будет неявно предоставлен. Но это не освобождает разработчика от написания надлежащего html/xml.

И могут быть случаи, когда два файла объединены вне обработки html/php, а отсутствующий тег может вызвать крайнее горе.

Ответ 5

Я всегда их вставляю, потому что я рассматриваю их как причудливую закрывающую скобку - так как, когда я пишу условные и циклы, которые я вставляю в открытую/закрывающую пару фигур перед написанием кода, я делаю это с файлами PHP.

Является ли это "правильным" или нет, я получасто часто оказываюсь, что превращаю "чистые" файлы PHP в "непустые", и закрывающий тег чрезвычайно полезен.

Ответ 6

Мы используем Drupal, который всегда опускает закрывающий тег и никогда не испытывал никаких проблем из-за этого.

Так как он всегда работал на Drupal (и я знал, что, прочитав руководство, он был необязательным), я однажды создал файл конфигурации (который содержал только PHP-код) без закрывающего тега. По какой-то причине это не сработало до тех пор, пока (по настоянию коллеги) я добавил закрывающий тег. Мы не пытались выяснить причину в то время.

Я всегда использовал закрывающий тег в коде, который я пишу; он выглядит более симметричным, концептуально "закрывает" открывающий тег, и я всегда стараюсь не оставлять лишних пробелов после закрывающего тега.

Ответ 7

Я всегда использую закрывающие теги, это просто не выглядит красивым без них. Он также не является допустимой инструкцией по обработке xml без них (не то, что вам нужно, если единственное, что есть в файле php)

Ответ 8

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

find . -name '*.php' | xargs cat | php -l

Конечно, следующая команда все еще работает (и отображает имя файла поврежденного файла)

find . -name '*.php' | while read filename; do php -l $filename | grep -v 'No syntax errors '; done

Но это намного медленнее.

Ответ 9

Наш офис работает с приложениями для электронного обучения, встроенными в Flash, и мы обнаружили на ранней стадии, что если закрывающий тег не будет удален со сценариев на стороне сервера, тогда он нарушит наш механизм связи с приложениями e-learnng.

Одно из предостережений в этом заключалось бы в том, что наш процесс debuggng не попробовал сначала в упрощенной среде, чтобы убедиться, что это не комбинация отсутствующих закрывающих тегов и некоторый ошибочный вывод, поступающий из какого-либо другого script....

Ответ 10

В ответ на @gabriel1836 закрывающие теги на стороне сервера не имеют значения, когда дело касается приложений Flash; какова релевантная полезная нагрузка, возвращаемая сервером в ответ на запрос удаленного доступа приложением Flash. Опускание закрывающего тега только на PHP файлах повлияет только на то, что ложный вывод не возвращается до отправки заголовков в ваше Flash-приложение.

В ответ на @CesarB, если вы не можете дать конкретный, воспроизводимый пример, все, что вы делаете, это распространение FUD. В руководстве PHP очень ясно, что закрывающий тег является необязательным.