我一直在阅读,在文件末尾使用PHP close标签?>
是一种不好的做法。 标头问题在以下情况下似乎无关紧要(这是迄今为止唯一的好参数):
现代版本的PHP在php.ini中设置了output_buffering标志。如果启用了输出缓冲,则可以在输出HTML之后设置HTTP标头和cookie,因为返回的代码不会立即发送到浏览器。
每本优秀实践书籍和Wiki均以该“规则”开头,但没有人提供充分的理由。 是否还有另一个很好的理由跳过结尾的PHP标记?
#1楼
除了已经说过的所有内容外,我还要提出另一个原因,这对我们进行调试是一个巨大的痛苦。
当封闭的php
标记后面有空白时,带有PHP 5.4的Apache 2.4.6实际上在我们的生产机器上存在分段错误。 我只是浪费了几个小时,直到我终于用strace缩小了bug的范围。
这是Apache引发的错误:
[core:notice] [pid 7842] AH00052: child pid 10218 exit signal Segmentation fault (11)
#2楼
由于我的问题被标记为与此重复的问题,我认为可以出于某些原因发布为什么不省略结束标记?>
可以的。
- 使用完整的处理指令语法(
<?php ... ?>
),PHP源代码是有效的SGML文档,可以对它进行解析和处理,而SGML解析器不会出现问题。 除其他限制外,它也可以是有效的XML / XHTML。
没有什么可以阻止您编写有效的XML / HTML / SGML代码。 PHP文档意识到了这一点。 摘抄:
注意:另外请注意,如果要将PHP嵌入XML或XHTML中,则需要使用<?php?>标记以保持符合标准。
当然,PHP语法不是严格的SGML / XML / HTML,并且您创建的文档不是SGML / XML / HTML,就像您可以将HTML转换为XHTML来兼容XML一样。
在某些时候,您可能希望连接源。 如果由于省略了结束
?>
标记而引起的不一致,这将不像简单地执行cat source1.php source2.php
那样简单。如果没有
?>
则很难判断文档是处于PHP转义模式还是PHP忽略模式(PI标签<?php
可能已打开或未打开)。 如果您始终将文档置于PHP忽略模式,则生活会更轻松。 就像使用格式正确的HTML文档相比,使用未关闭,嵌套错误的标签等文档进行处理一样。似乎有些编辑器,例如Dreamweaver,可能在PI处于打开状态时会遇到问题[1] 。
#3楼
php代码有2种可能的用法:
- PHP代码,例如类定义或函数定义
- 使用PHP作为模板语言(即在视图中)
在第一种情况下,结束标记是完全不可用的,在这种情况下,我也想只看到1(一个)php打开标记,而没有(零)结束标记。 这是一个好习惯,因为它可以使代码整洁,并使逻辑与表示分离。 对于演示案例(2.),有人发现关闭所有标签(甚至是PHP处理过的标签)是很自然的,这导致混淆,因为PHP实际上有2个单独的用例,不应混用:逻辑/演算和介绍
#4楼
根据docs ,由于以下原因,最好省略结束标记,如果它位于文件末尾:
如果文件是纯PHP代码,则最好在文件末尾省略PHP结束标记。 这样可以防止在PHP结束标记之后添加意外的空格或换行,这可能会导致不良影响,因为当程序员不打算在脚本中的该点发送任何输出时,PHP将开始输出缓冲。
#5楼
这不是标签...
但是,如果您有它,则可能会冒空白。
如果然后将其用作文档顶部的包含,则可能最终会在尝试发送HTTP标头之前插入空格(即内容),这是不允许的。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3168252