PHP结束标记“?>”

时间:2013-11-13 12:11:52

标签: php tags

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

2 个答案:

答案 0 :(得分:41)

这是有据可查的。来自PHP Manual

  

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

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

答案 1 :(得分:14)

这是一个核心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

虽然是手册mentions 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块,可以很容易地避免伪造白线。