Почему в php файлах не рекомендуется ставить закрывающийся тег
Когда PHP обрабатывает файл, он ищет открывающие и закрывающие теги, такие как , которые указывают PHP, когда начинать и заканчивать обработку кода между ними. Подобный способ обработки позволяет PHP внедряться во все виды различных документов, так как всё, что находится вне пары открывающих и закрывающих тегов, будет проигнорировано парсером PHP.
Пример #1 Открывающие и закрывающие теги PHP
Короткие теги (третий пример) доступны по умолчанию, но их можно отключить с помощью директивы short_open_tag в конфигурационном файле php.ini или отключены по умолчанию, если PHP был скомпилирован с опцией —disable-short-tags.
Замечание:
Поскольку короткие теги можно отключить, рекомендуется использовать только обычные теги ( и ) для максимальной совместимости.
Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавления случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.
echo «Последнее выражение» ;
// Скрипт заканчивается тут без закрывающего тега PHP
Стоит ли закрывать теги PHP-кода?
Даже те, кто скромно разбирается в PHP, знают, что код должен быть заключен в специальные теги .
примечание: альтернативные теги PHP
Вы также можете знать, что код PHP может быть разделен с помощью менее используемых тегов и script> . Если short_open_tag включен в php.ini, вы можете использовать хотя их следует избегать, если вы встраиваете код в XHTML или XML. Наконец, вы можете использовать теги в стиле ASP, если asp_tags установлен в php.ini.
Однако, если ваш файл содержит только PHP – и не содержит экранированного HTML-кода – закрывающий тег?> Не является обязательным. Многие разработчики утверждают, что ненужный код должен быть удален, но есть еще одна причина, по которой вы можете рассмотреть удаление закрывающего тега. Предположим, у нас есть библиотека функций PHP с именем library.php :
Библиотека включена в наш основной входной файл index.php :
End of index.php file.
К сожалению, при загрузке этой страницы появляются 2 предупреждения с одним и тем же сообщением:
Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены
Или хуже, если вы могли бы работать в реальной среде, где предупреждения были отключены, и сообщение не появляется. В любом случае, ни заголовок, ни cookie не установлены, и это может вызвать критические проблемы приложения. Что вызывает ошибку? Вы не можете видеть это, но после закрывающего символа есть пробел?> В файле library.php. Когда он находится в верхней части index.php, это пространство отправляется в браузер как содержимое страницы вместе со всеми необходимыми заголовками HTTP. После отправки первого блока содержимого невозможно установить дополнительные заголовки или файлы cookie.
примечание: выходная буферизация PHP
Современные версии PHP устанавливают флаг output_buffering в php.ini. Это буферизует ваш вывод HTML и отправляет его, когда ваш PHP-код был обработан или когда буфер достигает предела (например, 4096 байт). Вы также можете использовать PHP ob_start() ob_end_flush() Даже если вы уверены, что буферизация всегда включена, рекомендуется установить заголовки HTTP и файлы cookie перед отправкой содержимого страницы.
Ваше PHP-приложение может включать в себя десятки файлов библиотек или классов. Как вы можете себе представить, может быть трудно найти дополнительные пробелы, возврат каретки или любые другие символы после закрытия?>. К счастью, это легко исправить. Если вы пропустите закрытие?> Во всех ваших файлах кода только для PHP, ошибка просто не может произойти – парсер будет игнорировать пробелы. Это решение, но вы бы его использовали? Это заставляет меня чувствовать себя немного грязным … Вы уже опускаете закрывающий тег?>? Примешь ли ты практику? Или это просто неправильно?
Исправляем Parse error: Unexpected end of file в PHP
Прежде всего, убедитесь, что вы не пропустили закрывающие фигурные скобки ( > ), точки с запятой ( ; ) и что вы правильно использовали PHP-теги ( ). Если в файле нет другого кода кроме PHP, рекомендуется опускать закрывающий тег, чтобы избежать ошибок, связанных с лишними пробелами. Для быстрой сверки со стандартами синтаксиса можно воспользоваться линтером PHP.
Вот пример правильного кода:
Скопировать код
// Не забудьте эту скобку! // Закрывающий PHP-тег в этом случае не нужен
Визуализация
Ошибка «неожиданный конец файла» в PHP можно сравнить с незавершённой симфонией:
| Структура PHP кода | Музыкальное произведение | | -------------------- | --------------------------- | | | Финальные ноты |
Единственная пропущенная скобка ( > ) может нарушить гармонию вашей «PHP-симфонии», вызвав ошибку «неожиданный конец файла».
Скопировать код
if (condition) < echo 'Hello, world!'; // Где закрывающая скобка? >
Берегите скобки: работая со синтаксисом и фигурными скобками
Влюбиться в скобки и синтаксис
Проверьте структуру своего кода: она должна быть читаема, отформатирована правильно, соблюдены ли пробелы. Отделяйте фигурные скобки пробелами от PHP-тегов для улучшения восприятия кода:
Скопировать код
if-else: Игра противоположностей
Усемейтесь грамотно расставлять if-else блоки. Помните слова Таноса – «Совершенное равновесие – это ключ к успеху»:
Скопировать код
else < // В следующий раз повезет, не унывайте! >
С тегами нужно быть аккуратными
Считайте свои функции и условия закрытыми комнатами, а открывающие и закрывающие теги ( ) – это ключи, без которых вход в них невозможен.
Настройки сервера и функции, определённые пользователем: порядок и точность
Внимательно проверьте вашу функцию login() — не нарушили ли вы синтаксис при ее определении? Также стоит просмотреть настройки сервера в php.ini. Помните, что любые изменения в php.ini требуют перезагрузки сервера.
Тонкости синтаксиса: избавление от лишних символов и прочее.
Пусть все будет по минимуму
Стремитесь к лаконичности, удаляя всё лишнее и ненужное. Чем меньше «шума» – тем меньше вероятность ошибки.
Полезные материалы
- Руководство по PHP: Выход из HTML – Изучите основы PHP.
- W3Schools: Синтаксис PHP – Детально разберитесь с сути основного синтаксиса PHP.
- Руководство по PHP: PHP-теги – Избегайте ловушек при работе с PHP-тегами.
- PHP: Рекомендации по использованию – Советы, как написать идеальный PHP код.
- Stack Overflow: Почему иногда опускают закрывающий тег? – Узнайте секреты закрывающих PHP-тегов.
- Проверка PHP-кода – Проверка кода помогает избежать ошибок.
- PHP – Обработка ошибок и исключений – Как избежать ошибок при работе с PHP, советы для начинающих.
Закрывающийся тег php ?>
Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавления случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.
Отслеживать
123k 24 24 золотых знака 128 128 серебряных знаков 307 307 бронзовых знаков
ответ дан 23 янв 2013 в 16:29
7,418 17 17 серебряных знаков 22 22 бронзовых знака
И так и так будет правильно. Закрывающие теги обязательны для html файлов содержащих php код(хотя правильней будет сказать «php файлов содержащих html код). Но если у Вас файл только с php кодом, то закрывающий тег ставить не обязательно.
Если вдаваться в подробности, то для вывода php, серверу нужно не просто отдать браузеру файл «как есть»(как в случае с html) а вызвать php интерпретатор. PHP интерпретатор будет считывать(и выполнять) код до тех пор пока не встретит закрывающий тег или пока не встретит конец файла. Так что можете использовать и не использовать закрывающие теги.
Отслеживать
ответ дан 23 янв 2013 в 16:36
3,724 14 14 серебряных знаков 16 16 бронзовых знаков
То есть в современном PHP 8+ нет нужды опускать закрывающий тег, как это расписано здесь stackoverflow.com/questions/4410704/… ?