37

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

4

2 回答 2

63

这是有据可查的。来自PHP 手册

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

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

于 2013-11-13T12:14:55.597 回答
18

这是 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 块,可以轻松避免虚假的白线。

于 2013-11-13T12:28:45.773 回答