直接调用 php_sapi_name() 获取 SAPI 值,如 apache2handler、fpm-fcgi、cli 等,它准确反映 PHP 运行模式;注意若探针被 include/require 嵌入,则返回宿主脚本的 SAPI。

PHP探针里怎么看 php_sapi_name() 的返回值
PHP探针本质是 PHP 脚本,要确认当前运行模式,最直接可靠的方式就是调用 php_sapi_name()。这个函数不依赖外部配置或界面解析,返回的就是底层 SAPI(Server API)标识符,比如 apache2handler、fpm-fcgi、cli 等。
很多探针页面会把这项信息放在「环境变量」或「PHP信息」区块里,但位置不统一;更稳妥的做法是自己加一行代码验证:
注意:如果探针本身是通过 include 或 require 方式嵌入到其他脚本中执行,php_sapi_name() 返回的是**宿主脚本的运行模式**,不是探针文件本身的——这点容易误判。
为什么 $_SERVER['SERVER_SOFTWARE'] 不够准
$_SERVER['SERVER_SOFTWARE'] 显示的是 Web 服务器软件名(如 nginx/1.22.1 或 Apache/2.4.52),但它**完全不反映 PHP 是如何被调用的**。常见误导场景:
立即学习“PHP免费学习笔记(深入)”;
- Nginx + PHP-FPM:这里
$_SERVER['SERVER_SOFTWARE']是 nginx,但 PHP 实际以fpm-fcgi模式运行 - Apache + mod_php:显示 Apache,PHP 是
apache2handler - Apache + PHP-FPM(通过 proxy_fcgi):
$_SERVER['SERVER_SOFTWARE']还是 Apache,但 PHP 已经是fpm-fcgi
所以单看这个字段,无法区分 mod_php 和 FPM,更看不出 CLI 或嵌入式调用。
探针页面上常见的 SAPI 值对照表
不同 SAPI 值对应典型部署方式,识别时建议结合服务器实际架构判断:
-
apache2handler:Apache 加载了libphp.so(即传统 mod_php) -
fpm-fcgi:PHP 以 FPM 进程管理器方式运行,无论前端是 Nginx 还是 Apache(Proxy) -
cli:命令行执行,探针被php probe.php运行时出现 -
cgi-fcgi:较老的 CGI 模式(已基本淘汰),和 FPM 有本质区别 -
litespeed:LiteSpeed Web Server 直接集成 PHP 解释器
特别注意:fpm-fcgi 和 cgi-fcgi 名字相似,但前者是 FastCGI 长连接+进程池,后者是每次请求启动新进程——性能和稳定性差异极大。
用 phpinfo() 辅助交叉验证
如果探针页面集成了 phpinfo()(或你有权临时访问它),重点查看两处:
- 「Loaded Modules」区域:出现
mod_php或libphp→ 极大概率是apache2handler - 「Configuration File (php.ini) Path」下方的「Additional .ini files parsed」路径中,若含
www.conf或pool.d/→ 指向 FPM 配置,支持fpm-fcgi判断
不过 phpinfo() 输出可能被禁用(尤其在生产环境),且内容冗长易漏关键项——所以仍推荐优先查 php_sapi_name(),再用 phpinfo() 做辅助印证。
真正容易被忽略的点是:某些定制探针会缓存或硬编码 SAPI 显示值,重启 PHP-FPM 后没刷新页面,看到的仍是旧模式。遇到疑问,务必手动执行一次 php_sapi_name()。
