从PHP文件中删除结束标记的理由

时间:2014-06-24 11:03:42

标签: php syntax

好吧,我讨厌无缘无故地做某事,特别是如果它看起来是我见过的最愚蠢的事情,所以这里有:

我遇到了一个代码库,其中PHP文件以<?php开头,但不以?>结尾?

我没有看到任何关于原因的文档,但显然这与" security"有关。

有人可以告诉我为什么我会打破常识并省略文件底部的结束PHP标记吗?

2 个答案:

答案 0 :(得分:2)

documentation州:

  

如果文件是纯PHP代码,则最好省略文件末尾的PHP结束标记。这可以防止在PHP结束标记之后添加意外的空格或新行,这可能会导致不必要的影响,因为当程序员无意在脚本中发送任何输出时,PHP将启动输出缓冲。

它与“安全”无关。它与函数有关,其行为取决于输出是否已经发送到客户端。最好的例子是函数header()。它用于操作HTTP响应头。在发送任何输出之前,此函数仅在中起作用 - 如在HTTP中,标题无法在正文后发送。

让我们回到PHP的本质。它是一种脚本语言,可以嵌入到其他文档中,如HTML:

<html>
  <head><title><?php echo $title; ?></title></head>
  <body><?php echo $body; ?></body>
</html>

当嵌入到其他文档中时,PHP的输出将被插入到文档中,原始文档保持原样,这意味着只是将其文字内容发送给客户端。


当您有一个类文件时,例如:

<?php

class Foo {

}

?><whitespace>...
<newline>
<newline>

...您正在关闭PHP标记,文件中有两个被遗忘的空格和新行。 PHP会将这些空格和新行发送到客户端,这意味着像header()这样的函数将不再起作用。这只是一个嵌入了PHP代码的文本文档。 (与其他语言的源代码文件不同)。 PHP将替换<?php ?>之间的部分,并将结果+文件的剩余部分发送给客户端。

如果在这种情况下省略了结束PHP标记,PHP解析器将忽略空格和换行符,因为它们不包含代码。

答案 1 :(得分:0)

根据php.net的原因,避免结束php标签的原因是:

“如果文件是纯PHP代码,最好省略文件末尾的PHP结束标记。这可以防止在PHP结束标记之后添加意外的空格或新行,这可能会导致不良影响,因为PHP当程序员无意在脚本中发送任何输出时,将启动输出缓冲。“