php_sapi_name

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

php_sapi_name返回 Web 服务器和 PHP 之间的接口类型

说明

php_sapi_name(): string|false

返回一个描述 PHP 使用的接口类型(服务器 API,SAPI)的小写字符串。例如,在 CLI PHP 中,此字符串将是“cli”,而对于 Apache,它可能有多个不同的值,具体取决于使用的确切 SAPI。可能的返回值列在下面。

参数

此函数没有参数。

返回值

返回接口类型,以小写字符串形式,或在失败时返回 false

虽然不详尽,但可能的返回值包括 apacheapache2handlercgi(直到 PHP 5.3)、cgi-fcgiclicli-serverembedfpm-fcgilitespeedphpdbg

示例

示例 #1 php_sapi_name() 示例

此示例检查子字符串 cgi,因为它也可能是 cgi-fcgi

<?php
$sapi_type
= php_sapi_name();
if (
substr($sapi_type, 0, 3) == 'cgi') {
echo
"您正在使用 CGI PHP\n";
} else {
echo
"您没有使用 CGI PHP\n";
}
?>

注释

注意: 另一种方法

PHP 常量 PHP_SAPIphp_sapi_name() 的值相同。

提示

潜在的陷阱

定义的 SAPI 可能并不明显,因为例如它可能不是 apache,而是定义为 apache2handler

参见

添加注释

用户贡献的注释 5 个注释

michal at roszka dot pl
15 年前
php_sapi_name() 函数在您想要确定接口类型时非常有用。但是,在设计应用程序或将其部署到未知服务器时,还需要注意另一个陷阱。

无论何时,如果某些内容依赖于接口类型,请确保您的检查是决定性的。尤其是当您想要区分命令行界面 (CLI) 和通用网关接口 (CGI) 时。

请注意,php-cgi 二进制文件也可以从命令行、shell 脚本或 cron 作业中调用!如果是这样,php_sapi_name() 将始终返回相同的值(即“cgi-fcgi”),而不是您期望的“cli”。

好人会遇到不好的事情。不要总是期望 /usr/bin/php 是指向 php-cli 二进制文件的链接。

幸运的是,$_SERVER 和 $_ENV 超全局数组的内容取决于 php-cgi 二进制文件是从命令行界面(由 shell 脚本、cron 等调用)还是由某些 HTTP 服务器(如 lighttpd)调用。

<?php
var_dump
($_SERVER);
?>

尝试从命令行界面和通过 HTTP 请求调用 php-cgi 二进制文件,然后比较上面脚本的输出。将有许多选项可以满足几乎所有人的需求。

为了安全起见,请记住,$_SERVER 和 $_ENV 超全局数组的内容(以及 $_GET、$_POST、$_COOKIE、$_FILES 和 $_REQUEST)应被视为受污染的。
hajo-p
10 年前
一些尚未提到的 sapi 名称

cli-server -> php 内置 web 服务器
srv -> hhvm
匿名
1 年前
注意:在使用 Litespeed 和 CPanel 时,SAPI 将是“litespeed”,而不是包含“cgi”。
michael at butlerpc dot net
3 年前
在使用 nginx-unit 和 PHP 时,sapi 名称似乎是“cli-server”。
匿名
8 年前
php_sapi_name(与 PHP_SAPI 相同)可以是 cgi 或任何其他 cgi 模块(取决于您使用的模块) -

示例
'fpm-fcgi'
'cgi-fcgi'
[...]
To Top