在PHP 5.3.1中,<? ?>标签无法正常工作。

37

我刚在我的Linux服务器上安装了PHP 5.3.1,但是我以前使用标签编写的旧代码完全无法运行。

请帮我解决这个问题... 我该如何解决?

5个回答

75
不推荐使用短标签(<? ?>),应该使用完整的标签(<?php ?>)。如果想要使您的应用程序可移植,可能在另一个服务器上不允许使用短标签,因此您的应用程序将会出现问题。
另一方面,echo速记<?= $var ?> 始终可用,无论php.ini设置如何,并且不会被弃用。您可以使用它来替代<?php echo $var; ?> 作为最后的手段,要启用短标签,请以以下方式之一启用short_open_tag ini指令(可能不是所有方法都适用于您):
- 在php.ini中设置指令short_open_tag = On(推荐方式); - 在您的代码中调用ini_set("short_open_tag", 1);; - 将以下行添加到您的.htaccess文件中:php_value short_open_tag 1

对于默认行为:

------------------------------------------------
php.ini values : short_open_tag
------------------------------------------------

PHP 4, 5_0
 * Default behaviour   : on
 * php.ini-dist        : on
 * php.ini-recommended : on

PHP 5_1, 5_2:
 * Default behaviour   : on
 * php.ini-dist        : on
 * php.ini-recommended : off

PHP 5_3:
 * Default behaviour   : on
 * php.ini-development : off
 * php.ini-production  : off

不鼓励使用短标签的原因:

此指令决定 PHP 是否将 <??> 标签之间的代码识别为应当被处理的 PHP 源代码。多年来,一直推荐不要使用短标签“快捷方式”,而是使用完整的 <?php?> 标记组合。由于 XML 的广泛使用和其他语言使用这些标记,服务器可能会变得容易混淆,并在错误的上下文中解析错误的代码。但由于这个快捷方式已经成为一个特性很长时间了,目前仍然支持向后兼容,但我们建议您不要使用它们。

还请注意这个有关模板短标签的被拒绝的 RFC:http://wiki.php.net/rfc/shortags


27
作为另一个观点,没有单一的理由来避免极其有用的 <?= ?> 语法。而且从php6开始这种说法就不再正确了。停止传播这个荒唐的谣言。 - Your Common Sense
1
@Col 使用 <?php echo ?> 代替 <?= ?>。像许多人一样,我也遇到了短标签的问题。你永远不知道你的代码将在哪里运行,所以为了安全起见,请使用 <?php echo ?>。少几个字节不会害死你 :) - AntonioCS
2
@Col. Shrapnel: 你有证据证明它不是真的吗?根据我拥有的信息,看起来至少是不建议使用。 - Felix Kling
6
你是否有一份证明这是真的的来源?从你上面链接的同一讨论中,至少有Rasmus自己的话:"我们决定不在PHP 6中删除它们"。 - Your Common Sense
4
@Col. Shrapnel:好的,我认为到目前为止我会坚持这个http://stackoverflow.com/questions/2413661/php6-is-short-open-tag-removed-or-deprecated-or-neither 无论如何,为什么你没有想到这个呢?我只能说我知道的。现在我必须搜索以确认你是正确的,尽管你本来就可以告诉我。这就是我所要求的全部。这也是我认为你对此并不确定的原因。否则,你可以说“这里读一下”然后讨论就结束了。 - Felix Kling
显示剩余10条评论

11

看起来你在php.ini文件中将short_open_tags设置为“Off”。 尝试将其设置为"On"并重新启动apache。


1

你很可能需要在你的PHP配置文件中打开短标签。由于不知道你的配置,我无法确定你会在哪里找到它,但你要找的是php.ini(最有可能在像/etc/php.ini这样的地方)。

在那里,你需要找到的设置是short_open_tags。请参见此处以获取有关PHP所有核心配置设置的信息。然而,正如其他人所提到的,使用短标签可能不是最佳策略。这里是一个关于支持和反对的好讨论。


好的讨论,但理由不正确。 - Your Common Sense
1
@Shrapnel上校:怎么了?我倾向于使用长标签而不是短标签,因为其中一些原因已经在那里描述过了。老实说,我认为这至少部分取决于个人喜好。只要你知道两种方式的影响,你可以使用任何你想要的方式。 - Mark Embling
我现在不是在谈论编码偏好,而是在谈论虚假的谣言。 - Your Common Sense

0

可能是您的新配置不允许使用短标签。只需使用<?php ?>。这是更好的实践方式。

如果您仍然想使用它们,可以使用short_open_tag指令。还要记住,如果禁用了短标签,则无法正常工作。

这样做的主要原因是为了您可以使用内联XML标签。


3
如果你的代码需要在你无法控制的其他服务器上运行,使用 <?php ?> 可以确保可移植性。 - Sinan
这可以是一个原因。但是应该根据个人判断,而不是严格的推荐。实际上,大部分代码并非为了广泛使用而编写。而且有许多模板系统可供选择。如果有人将PHP作为模板系统使用,那么使用长标记就是荒谬的。只需选择另一个模板系统,完全忘记这个问题。 - Your Common Sense

0

如果您使用wamp或xamp,激活它们非常简单。 只需点击图标->php服务器->设置->允许短标签打开

最好不要使用此功能。例如,XML在文档中使用相同的方式打开标题。


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