У меня было интересное явление с концевым тегом PHP. У меня был php-файл, который был выполнен с помощью вызова Ajax. В php-файл был включен файл библиотеки php с различными функциями. Когда эта библиотека была включена, в php-ответ включался пучок пустых строк. Когда я удалил конец тега из библиотеки, это остановилось. Может ли кто-нибудь объяснить мне, что здесь происходит?
Это хорошо документировано. Из руководства PHP :
Закрывающий тег блока PHP в конце файла является необязательным, и в некоторых случаях его исключение полезно при использовании include () или require (), поэтому нежелательные пробелы не будут возникать в конце файлов, и вы все равно будете иметь возможность добавлять заголовки к ответу позже. Это также удобно, если вы используете буферизацию вывода и не хотели бы видеть добавленные нежелательные пробелы в конце частей, сгенерированных включенными файлами.
Опускание закрывающего тега помогает предотвратить случайное добавление пробелов или новых строк в конец файла.
Это основная функция PHP: в отличие от других языков вам нужно пометить PHP-код специальным тегом (обычно <?php
), потому что все остальное считается литералом:
This is not PHP <?php echo 'This is PHP' . PHP_EOL; ?> This is not PHP either
D:\tmp>php test.php This is not PHP This is PHP This is not PHP either
Хотя в руководстве упоминается HTML , PHP не знает и не заботится о том, какой тип контента находится за пределами его тегов.
Если вы забудете закрыть блок PHP, когда последует дальнейший материал, вы обычно получаете синтаксическую ошибку:
This is not PHP <?php echo 'This is PHP' . PHP_EOL; This is not PHP either
D:\tmp>php test.php PHP Parse error: syntax error, unexpected 'is' (T_STRING) in D:\tmp\borrame.php on line 6
Пустые строки – это особый случай, потому что они действительны и почти невидимы почти на всех языках (PHP, HTML, CSS, JavaScript …), поэтому они часто остаются незамеченными.
После удаления тега ?>
, Ваши литеральные пустые строки исчезли из вывода скрипта, потому что они стали частью кода PHP (и, как таковые, они начали игнорироваться).
Конечно, пустые строки игнорируются PHP, но не обязательно тем, что вы генерируете, что, как я уже сказал, не обязательно должно быть HTML: это может быть изображение, документ PDF, электронная таблица Excel. Бегущие строки Bogus можно легко избежать, не закрывая последний блок PHP, когда это последняя часть файла.