phpinfo可查短标签开关吗_检测short_open_tag状态法【探测】

能,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 状态

能,但得会看。phpinfo() 输出页面里没有单独标“short_open_tag: On/Off”的字段,它藏在 Core 配置节里,对应项叫 short_open_tag,值是 OnOff(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_tagPHP_INI_SYSTEM 级配置,意味着它只能在 php.ini 或 Web 服务器模块中设置,不能用 ini_set() 运行时修改。但问题在于:

百度智能云·曦灵

百度智能云·曦灵

百度旗下的AI数字人平台

下载

立即学习PHP免费学习笔记(深入)”;

  • 多个 php.ini 文件可能被加载(CLI vs FPM vs Apache 模块),phpinfo() 显示的是当前 SAPI 实际生效的那个,但你未必知道它来自哪份文件
  • 某些托管环境禁用 phpinfo() 或屏蔽敏感配置输出(比如把 short_open_tag 行过滤掉)
  • 最麻烦的是:即使 phpinfo() 显示 On,如果代码里混用了 ,而文件开头没加 php 标签,解析器可能在某处卡住,表现像“开关没生效”

真要确认是否可用,写一行 echo 'test'; ?> 放在脚本最顶上,看输出是 test 还是原样字符串——这才是最终裁决。

https://www.php.cn/faq/1981885.html

发表回复

Your email address will not be published. Required fields are marked *