2011-06-01 53 views
6

可能重复:
Why do some scripts omit the closing php tag '?>'?的省略关闭PHP标识

我一直在阅读有关忽略关闭PHP标签的一些文章,因为他们说这是在PHP中,如果一个良好的编程习惯你.php文件不包含任何其他内容。有很多这样的问题,但在我尝试了他们迄今为止所做的工作之后,在我的机器上运行良好。也许这是一个固定的问题或什么?

但我不明白为什么它可能是一个良好的编程习惯,因为它带来的空间或东西,但我已经试过这一个,而且运作非常良好。

Master.php

<?php 

echo "Master.php"; 

include "Slave.php"; 

header("Location:Slave.php"); 

?> 

Slave.php

<?php 

echo "Slave.php"; 

?> 

我真的不完全得到这个问题应该是什么,如果我不使用PHP的关闭标记。

谢谢。

+0

它不重复的,因为我要问更具体的问题用一个例子。 – Tarik 2011-06-01 05:03:27

+1

这首先是一个新人编码风格的建议。它避免了那个臭名昭着的错误。但是,如果你知道自己在做什么,显然没什么大不了的。 (可能对于分布式代码仍然非常明智) – mario 2011-06-01 05:04:05

+0

您正在使用更多的单词,但您没有更具体。你在问同样的问题。 – meagar 2011-06-01 12:37:12

回答

10

主要的问题是你可能包括额外的空格(但它可以是任何字符)收盘?>(除了一个\n其中PHP允许,感谢Mario)之后。

这多余的空格似乎PHP作为发送输出。这使得PHP开始发送响应正文,因此不可能设置/修改任何额外的头文件。

这很难调试(因为空白在文本编辑器中通常是不可见的),并且通常导致可怕的头文件已经发送错误。

+0

我试过了,代码运行得很好,除了这个结果'Slave.php \ n',但它最终还是有效的...' – Tarik 2011-06-01 05:02:44

+1

''>''后面的那个单行换行被PHP吃掉了。这是额外的换行符和回车或其他导致错误的空格。 (好,相同的区别..) – mario 2011-06-01 05:06:50

+0

@mario谢谢,糟糕的例子,我会更新:) – alex 2011-06-01 05:09:17

2

与关闭标签的问题是,在最后的任何空白?>可能造成的错误,是很困难的,而错误修复检测。

0

它通常更好不是结束您的脚本与关闭PHP标记。

在你的情况下,在?>之后可能会留下空白(如果由于这个原因导致某些事情中断,那么这很狡猾,很难判断出错),所以它会被视为输出,你将无法启动会话,例如,如果您正在开发网站,则会传递标头。

只是我的意见。我可能永远不会结束我的结束标记脚本

0

的问题来自于具有任何数量的线比1打破其他:一些PHP解析器生气,如果没有在该端换行,但如果你有一个以上的,因为php标签之外的任何东西都被视为HTML,所以它被打印出

最常见的问题是,一个库/模型文件将有一个额外的线路中断,导致页面/视图实例化之前长发送的头。