【问题标题】:Omitting Closing Php Tag [duplicate]省略关闭 PHP 标记 [重复]
【发布时间】:2011-09-05 23:47:51
【问题描述】:

可能重复:
Why do some scripts omit the closing php tag '?>'?

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

但我不太明白为什么它可能是一种很好的编程实践,因为它带来了空间或其他东西,但我已经尝试过这个并且效果很好。

Master.php

<?php

echo "Master.php";

include "Slave.php";

header("Location:Slave.php");

?>

Slave.php

<?php

echo "Slave.php";

?> 

如果我不使用关闭 php 标记,我真的不太明白问题应该是什么。

谢谢。

【问题讨论】:

  • 这不是重复的,因为我用一个例子提出了更具体的问题。
  • 首先是新手编码风格推荐。它避免了那个臭名昭著的错误。但是,如果您知道自己在做什么,显然没什么大不了的。 (对于分布式代码可能仍然非常明智。)
  • 你用了更多的词,但你没有更具体。你问的是同一个问题。

标签: php


【解决方案1】:

主要问题是您可能在结束 ?&gt; 之后包含额外的空格(但它可以是任何字符)(除了 PHP 允许的一个 \n,感谢 Mario)。

这个额外的空格对 PHP 来说似乎是要发送的输出。这使得 PHP 开始发送响应正文,因此无法设置/修改任何其他标头。

这很难调试(因为空白在文本编辑器中通常是不可见的)并且通常是可怕的 Headers already sent 错误的原因。

【讨论】:

  • 我已经尝试过了,代码运行良好,除了这个结果Slave.php\n,但它最终运行...
  • ?&gt; 之后的单个换行符被 PHP 吃掉了。这是导致错误的额外换行符和回车符或其他空格。 (嗯,同样的区别..)
  • @mario 谢谢,不好的例子,我会更新:)
【解决方案2】:

结束标签的问题是最后一个 ?> 之后的任何空格都可能导致错误,并且在修复错误时很难检测到。

【讨论】:

    【解决方案3】:

    通常最好以结束 PHP 标记结束您的脚本。

    在您的情况下,?&gt; 之后可能会保留一个空格(如果由于这个原因而出现问题,则很难判断错误在哪里),因此它将被视为输出,您将无法启动会话,例如,如果您正在开发网站,则传递标头。

    只是我的看法。我可能永远不会用结束标签结束我的脚本

    【讨论】:

      【解决方案4】:

      问题来自除 1 之外的任何数量的换行符:如果最后没有换行符,一些 php 解析器会感到不安,但如果你有多个换行符,它会被打印,因为 php 标记之外的任何内容都是被认为是 HTML。

      最常见的问题是库/模型文件会有额外的换行符,导致在页面/视图实例化之前很久就发送标题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-15
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        相关资源
        最近更新 更多