PHP语句的正确打开和关闭方式是什么?

5

打开以下PHP版本是否有任何区别或相关风险?

<? echo "hello world!"; ?>

<?php echo "hello world!"; ?>

<?="hello world!"?>

此外,关闭所有脚本标签是否必要?

3个回答

15
区别在于一些服务器可能通过 short_open_tag 禁用第一个和最后一个示例。因此,如果您希望代码尽可能具有可移植性,则应该使用完整的 <?php,否则当您将代码移动到新服务器时,您可能会发现它不能按预期工作。另外,如果尝试进行 <?xml 类型声明,则使用短标签可能会导致冲突。至于安全性,如果有人决定关闭 short_open_tag,使用该标记的代码理论上可能是危险的;然后,使用该标记的代码将成为纯文本并广播给所有人(请查看评论了解更多信息)。
至于您的另一个问题,省略闭合标签是为了防止意外地将空格输出到浏览器中,因为这可能会干扰某些脚本,特别是那些尝试输出任何类型的头文件的脚本。这就是为什么 Zend 编程指南 建议不要关闭 PHP 标签。
既然我已经说完了所有这些,除非我正在开发开源项目,否则我 个人 使用短开标签并关闭所有 PHP 标签。这是因为我通常控制我的环境,而且我认为 a) <?= 太方便了,b) 如果您打开了某些内容,就应该将其关闭。然而,“最佳实践”并不完全赞同这种做法。

那么,如果你知道服务器的功能,使用哪一个就无所谓了? - Peter Craig
禁用这另外两个示例的原因是什么,它们是否不够安全? - Peter Craig
Paolo 指出,在将代码移植到不同的系统时,需要考虑它们的配置。 - strager
@Peter:其他一些语言/库使用<?和?>标签,因此禁用它们可以使PHP不受干扰。 - Sasha Chedygov
6
我曾经的一个托管提供商决定关闭短标签(没有通知),导致我的一个旧项目只剩下一堆文本文件在明面上。所有敏感信息都在网站根目录之外(当然),但我肯定会称之为安全风险! - da5id

6

当你无法控制托管时,可移植性可能很重要。例如,当我编写了一些 PHP 程序并且它们托管在我的大学的托管服务上时,它们一直运行良好,直到他们更改了配置以禁止使用某些语法,这就破坏了很多页面。

即使它在某个时候能够正常工作,如果你无法控制托管服务,那么没有任何保证。


2

短标签。经常提到此选项可能未启用。我从未见过这种情况,但我想这是可能的。您可能需要更改托管提供商或其他内容。一般来说,我将使用简短形式。如果我需要更改它,那么它是一个非常简单的搜索和替换操作。

更重要的是,您编写的 PHP 代码有多少需要可移植而不仅仅是在特定应用程序上运行的情况?

唯一真正需要考虑的问题(依我之见)是 XML 处理指令,如果您输出 XHTML,则可能会出现问题,尽管我从未见过使用严格或过渡 HTML 的原因。


+1,因为我同意你的所有观点,但是我必须尽职调查并列出人们声称不使用短标签是最佳实践的原因。 - Paolo Bergantino
@Paolo:据我所知,这只是选项可能被禁用和XML PIs的问题。这是一个合理的问题和合理的立场,永远不要使用缩写形式。我只是总是这样做。 - cletus
@cletus:是的,我太爱 <?= 了,舍不得放弃。 :) - Paolo Bergantino
似乎很奇怪的是,共识是倾向于使用<?php,但由于懒惰或习惯,没有人这样做。 - Peter Craig
1
我在我的代码中始终使用<?php,即使我控制环境。我希望始终使用相同的标签,而<?php是唯一避免所有潜在问题的标签。 - dirtside

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接