Ненужный закрывающий тэг PHP? [дубликат]

10
задан Community 23 May 2017 в 11:53
поделиться

6 ответов

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

12
ответ дан 3 December 2019 в 17:19
поделиться

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

3
ответ дан 3 December 2019 в 17:19
поделиться

На самом деле особо нечего сказать об этой проблеме.

PHP-файл, заканчивающийся так:

<php
//code
?>   

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

После отправки заголовков невозможно делать такие вещи, как изменение строки состояния или типа содержимого.

Поскольку закрывающий тег подразумевается в конце файла, вы можете просто опустить закрывающий тег для файлов, содержащих только код PHP. Если вы это сделаете, любые завершающие пробелы будут рассматриваться как пробелы в коде, а не как пробелы в содержимом, и будут игнорироваться.

6
ответ дан 3 December 2019 в 17:19
поделиться

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

1
ответ дан 3 December 2019 в 17:19
поделиться

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

0
ответ дан 3 December 2019 в 17:19
поделиться

Из руководства ( http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php ):

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

1
ответ дан 3 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: