PHP结束标记"?>"

Ari*_*Ari 23 php tags

我有一个PHP结束标记的有趣现象.我有一个由Ajax调用执行的php文件.在php文件中包含了一个具有各种功能的php库文件.当这个库被包含时,php响应包括一堆空行.当我从库中删除结束标记时,这种情况就停止了.任何人都可以向我解释这里发生了什么?

Ama*_*ali 42

这是有据可查的.从PHP手册:

文件末尾的PHP块的结束标记是可选的,在某些情况下,在使用include()或require()时省略它是有帮助的,因此在文件末尾不会出现不需要的空格,并且您仍然会能够稍后将响应添加到响应中.如果使用输出缓冲,它也很方便,并且不希望在包含的文件生成的部分的末尾看到添加的不需要的空格.

省略结束标记有助于防止意外的空格或换行符添加到文件末尾.


Álv*_*lez 15

这是一个核心PHP功能:与其他语言不同,您需要使用特殊标记(通常<?php)标记PHP代码,因为其他所有内容都被视为文字输出:

This is not PHP
<?php

echo 'This is PHP' . PHP_EOL;

?>
This is not PHP either
Run Code Online (Sandbox Code Playgroud)
D:\tmp>php test.php
This is not PHP
This is PHP
This is not PHP either
Run Code Online (Sandbox Code Playgroud)

尽管手册提到了HTML,但PHP并不真正了解/关心其标签之外的内容类型.

如果您忘记在进一步填充后关闭PHP块,通常会出现语法错误:

This is not PHP
<?php

echo 'This is PHP' . PHP_EOL;

This is not PHP either
Run Code Online (Sandbox Code Playgroud)
D:\tmp>php test.php
PHP Parse error:  syntax error, unexpected 'is' (T_STRING) in D:\tmp\borrame.php on line 6
Run Code Online (Sandbox Code Playgroud)

空行是一种特殊情况,因为它们在几乎所有语言(PHP,HTML,CSS,JavaScript ......)中都是有效且几乎不可见的,因此它们经常被忽视.

删除?>标记后,文字空白行已从脚本输出中消失,因为它们已成为PHP代码的一部分(因此,它们已开始被忽略).

当然,PHP会忽略空行,但不一定是你生成的任何内容,正如我所说,它不需要是HTML:它可以是图片,PDF文档,Excel电子表格.当它是文件的最后一部分时,不关闭最后一个PHP块,可以很容易地避免伪造白线.