Почему некоторые скрипты опускают закрывающий тег PHP, '?>'?
В некоторых сценариях я вижу, что они пропускают запись закрывающего тега ?>
для script. Почему я должен делать это тоже?
(Я уверен, что они этого не забыли.)
Ответы
Ответ 1
Ну, опускание закрывающего тега - это просто одно решение для избежания пробелов и других символов в конце файла. Например, любой char, который случайно добавлен за закрывающим тегом, вызовет ошибку при попытке изменить информацию заголовка позже.
Удаление закрывающего тега является "хорошей практикой", относящейся ко многим руководствам по кодированию.
Ответ 2
От PHP: Разделение инструкций
Закрывающий тег блока PHP в конце файла является необязательным, и в некоторых случаях его исключение полезно при использовании include()
или require()
, поэтому нежелательные пробелы не будут возникать в конце файлов и вы по-прежнему сможете добавлять заголовки в ответ позже. Это также удобно, если вы используете буферизацию вывода и не хотели бы видеть добавленные нежелательные пробелы в конце частей, сгенерированных включенными файлами.
Ответ 3
php.net в тегах PHP:
Если файл является чистым PHP-кодом, желательно опустить закрытие PHP тег в конце файла. Это предотвращает случайные пробелы или новые строки добавляются после тега закрытия PHP, что может вызвать нежелательные потому что PHP начнет буферизацию вывода, когда нет намерение программиста отправить любой результат в этот момент в script.
Ответ 4
Они делают это, чтобы избежать риска иметь пробелы после закрывающего тега, которые могут остановить работу заголовков.
Это, конечно, верно для файлов только для PHP.
Ответ 5
CodeIgniter Framework предлагает опустить закрывающие теги для
"... может вызвать нежелательный вывод, ошибки PHP или пустые страницы".
Вы можете прочитать его здесь.
Ответ 6
Современные версии PHP устанавливают флаг output_buffering
в php.ini
. Если буферизация вывода включена, вы можете установить заголовки HTTP и файлы cookie после вывода HTML, потому что возвращенный код не сразу отправляется в браузер.
Являются ли примеры действительными в этом контексте?
Ответ 7
- Отображает нежелательную пробел/пустую страницу. Заголовки HTTP не работают для нежелательных пробелов.
- Большинство В конце файла выполняется JavaScript-инъекция. Он покажет сообщение об ошибке и сломает код, код введённого JavaScript не будет выполнен.