php如何检测当前运行环境是cli还是web_php判断运行模式getenv与php_sapi_name方法

答案:推荐使用php_sapi_name()判断PHP运行环境,其返回'cli'表示命令行模式,而getenv('SHELL')可作辅助但不可靠。

PHP 提供了多种方式来判断当前脚本运行在 CLI(命令行)环境还是 Web 环境。常见的方法包括使用 php_sapi_name()getenv() 函数。下面介绍这两种方式的用法与区别。

使用 php_sapi_name() 判断运行模式

php_sapi_name() 用于获取 PHP 的服务器接口类型,返回一个字符串标识当前 SAPI(Server API)名称。

常见返回值包括:

  • cli:表示运行在命令行环境下
  • apache2handler:Apache 模块方式运行
  • fpm-fcgi:PHP-FPM 运行
  • cgi:CGI 模式

示例代码:

if (php_sapi_name() === 'cli') {
    echo "当前运行在命令行环境";
} else {
    echo "当前运行在Web环境";
}

使用 getenv() 获取环境变量判断

getenv('SHELL')getenv('TERM') 可用于检测是否存在典型的命令行环境变量。

CLI 环境通常会设置 SHELL、TERM、USER 等系统环境变量,而 Web 服务器(如 Apache、Nginx)一般不会设置这些变量。

示例代码:

if (getenv('SHELL')) {
    echo "可能是CLI环境";
} else {
    echo "可能是Web环境";
}

注意:这种方法不完全可靠,因为某些 CGI 或特殊配置下也可能存在部分环境变量,建议作为辅助判断。

推荐做法:优先使用 php_sapi_name()

php_sapi_name() 是最直接且准确的方式,适用于绝大多数场景。

完整封装示例:

function isCli() {
    return php_sapi_name() === 'cli';
}

if (isCli()) {
    echo "执行命令行任务";
} else {
    echo "处理HTTP请求";
}

基本上就这些。判断运行环境时,php_sapi_name() 更稳定可靠,getenv() 可作为补充手段,但不要单独依赖它。实际开发中根据需求选择即可。