PHP 8 没有显示 short_open_tag 设置

问题描述

以下返回长度为零的字符串:

<?PHP
print_r(ini_get('short_open_tag'));
?>

在两台 PHP 8 服务器(apache2handler 和 cgi-fcgi)上,我需要知道是否启用了短标签,因为它会与 XML 产生冲突。我无法停止我正在做的一切去看看PHPinfo()

代码在两台服务器上的 PHP 7.4 中都运行良好。现在,我确实知道短标签已禁用,但我需要在服务器升级快速知道。

如何让 ini_get('short_open_tag') 重新工作?

解决方法

虽然这是一个布尔值设置,但 ini_get 实际上是 return a string

注意:查询布尔值时

off 的布尔 ini 值将作为空字符串或“0”返回,而 on 的布尔 ini 值将作为“1”返回。该函数还可以返回 INI 值的文字字符串。

因此,当启用该功能时,它将返回“1”,您可以使用它来检查设置的状态。 (尽管该注释中有最后一句,但我从未见过为布尔值返回任何文字值,例如“on”或“off”。)

var_dump(ini_get('short_open_tag'));

启用设置的输出:

string(1) "1"

一点历史:虽然有 a vote taken 删除这些标签,但它被推翻了。主要关注的是在升级服务器时会向最终用户显示的遗留代码——同样的原因,尽管不鼓励使用该设置,但仍然默认为“开”for decades。在第一个 RFC 崩溃之后,使短开放标签成为错误条件的 a subsequent proposal 没有获得所需的 2/3 多数通过。