确定 PHP 脚本的命令行与 http 执行的规范方法是什么?

我有一个PHP脚本,需要确定它是通过命令行还是通过HTTP执行的,主要用于输出格式化目的。这样做的规范方法是什么?我本来以为是检查 ,但事实证明,即使使用“ Apache 2.0 Handler”服务器API,这也被填充了。SERVER['argc']


答案 1

使用 php_sapi_name() 函数。

if (php_sapi_name() == "cli") {
    // In cli-mode
} else {
    // Not in cli-mode
}

以下是文档中的一些相关说明:

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

虽然不是详尽无遗的,但可能的返回值包括aolserver,apache,apache2filter,apache2handler,caudium,cgi(直到PHP 5.3),cgi-fcgi,cli,cli-server,continuity,embed,isapi,litespeed,milter,nsapi,phttpd,pi3web,roxen,thttpd,tux和webjames。

在 PHP >= 4.2.0 中,还有一个预定义的常量 ,其值与 相同。PHP_SAPIphp_sapi_name()


答案 2

这将始终有效。(如果 PHP 版本是 4.2.0 或更高版本)

define('CLI', PHP_SAPI === 'cli');

这使得它很容易在脚本的顶部使用:

<?php PHP_SAPI === 'cli' or die('not allowed');

推荐