PHP 结束标记“?>”
我有一个有趣的现象与PHP结束标签。我有一个由Ajax调用执行的php文件。在php文件中包含一个具有各种函数的php库文件。当包含此库时,php 响应包含一堆空行。当我从库中删除结束标记时,这种情况停止了。任何人都可以向我解释这里发生了什么吗?
我有一个有趣的现象与PHP结束标签。我有一个由Ajax调用执行的php文件。在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电子表格。伪造的白线可以很容易地避免,因为它不关闭最后一个PHP块,因为它是文件的最后一部分。