В некоторых сценариях я вижу, что они пропускают запись закрывающего тега ?>
для script. Почему я должен делать это тоже?
(Я уверен, что они этого не забыли.)
В некоторых сценариях я вижу, что они пропускают запись закрывающего тега ?>
для script. Почему я должен делать это тоже?
(Я уверен, что они этого не забыли.)
Ну, опускание закрывающего тега - это просто одно решение для избежания пробелов и других символов в конце файла. Например, любой char, который случайно добавлен за закрывающим тегом, вызовет ошибку при попытке изменить информацию заголовка позже.
Удаление закрывающего тега является "хорошей практикой", относящейся ко многим руководствам по кодированию.
Закрывающий тег блока PHP в конце файла является необязательным, и в некоторых случаях его исключение полезно при использовании
include()
илиrequire()
, поэтому нежелательные пробелы не будут возникать в конце файлов и вы по-прежнему сможете добавлять заголовки в ответ позже. Это также удобно, если вы используете буферизацию вывода и не хотели бы видеть добавленные нежелательные пробелы в конце частей, сгенерированных включенными файлами.
Если файл является чистым PHP-кодом, желательно опустить закрытие PHP тег в конце файла. Это предотвращает случайные пробелы или новые строки добавляются после тега закрытия PHP, что может вызвать нежелательные потому что PHP начнет буферизацию вывода, когда нет намерение программиста отправить любой результат в этот момент в script.
Они делают это, чтобы избежать риска иметь пробелы после закрывающего тега, которые могут остановить работу заголовков.
Это, конечно, верно для файлов только для PHP.
CodeIgniter Framework предлагает опустить закрывающие теги для
"... может вызвать нежелательный вывод, ошибки PHP или пустые страницы".
Вы можете прочитать его здесь.
Современные версии PHP устанавливают флаг output_buffering
в php.ini
. Если буферизация вывода включена, вы можете установить заголовки HTTP и файлы cookie после вывода HTML, потому что возвращенный код не сразу отправляется в браузер.
Являются ли примеры действительными в этом контексте?