能,phpinfo() 中Core节显示short_open_tag值为On/Off(PHP 8.0+已移除,始终Off);更可靠方式是用ini_get('short_open_tag')配合版本判断,因配置属PHP_INI_SYSTEM级且多配置文件可能干扰。

phpinfo() 能不能直接看到 short_open_tag 状态
能,但得会看。phpinfo() 输出页面里没有单独标“short_open_tag: On/Off”的字段,它藏在 Core 配置节里,对应项叫 short_open_tag,值是 On 或 Off(PHP 8.0+ 已移除该指令,始终为 Off)。
用 phpinfo() 查 short_open_tag 的实操要点
直接访问含 的脚本,然后在浏览器页面 Ctrl+F 搜 short_open_tag:
- 如果搜到且值为
On,说明短标签... ?>和= ... ?>可用(注意:后者在 PHP 5.4+ 默认始终开启,与该配置无关) - 如果搜不到,大概率是 PHP 8.0+,该配置已被彻底废弃,短标签仅
=有效,和以外的变体(如echo)会被当作纯文本输出 - 若页面搜不到但怀疑配置存在,可检查
Loaded Configuration File路径下的php.ini,手动 grep:grep "short_open_tag" /etc/php/*/apache2/php.ini
比 phpinfo() 更准的检测法:运行时判断
依赖页面输出不可靠,尤其当 short_open_tag = Off 时, echo 'x'; ?> 会原样输出,导致 phpinfo() 脚本本身都可能出错。更稳的方式是用 PHP 函数查:
-
ini_get('short_open_tag')返回字符串"1"或""(空),注意不是布尔值 - PHP 8.0+ 调用该函数会返回
""(因配置项不存在),需额外判断版本:version_compare(PHP_VERSION, '8.0.0', '>=') ? 'N/A (removed)' : ini_get('short_open_tag'); - 别用
get_cfg_var()—— 它只读主配置,不包含 .htaccess 或 user_ini 设置,不准
为什么不能只信 phpinfo() 页面里的值
因为 short_open_tag 是 PHP_INI_SYSTEM 级配置,意味着它只能在 php.ini 或 Web 服务器模块中设置,不能用 ini_set() 运行时修改。但问题在于:
立即学习“PHP免费学习笔记(深入)”;
- 多个
php.ini文件可能被加载(CLI vs FPM vs Apache 模块),phpinfo()显示的是当前 SAPI 实际生效的那个,但你未必知道它来自哪份文件 - 某些托管环境禁用
phpinfo()或屏蔽敏感配置输出(比如把short_open_tag行过滤掉) - 最麻烦的是:即使
phpinfo()显示On,如果代码里混用了和,而文件开头没加php标签,解析器可能在某处卡住,表现像“开关没生效”
真要确认是否可用,写一行 echo 'test'; ?> 放在脚本最顶上,看输出是 test 还是原样字符串——这才是最终裁决。











