确定 PHP 脚本的命令行与 http 执行的规范方法是什么?
2022-08-30 06:39:41
我有一个PHP脚本,需要确定它是通过命令行还是通过HTTP执行的,主要用于输出格式化目的。这样做的规范方法是什么?我本来以为是检查 ,但事实证明,即使使用“ Apache 2.0 Handler”服务器API,这也被填充了。SERVER['argc']
我有一个PHP脚本,需要确定它是通过命令行还是通过HTTP执行的,主要用于输出格式化目的。这样做的规范方法是什么?我本来以为是检查 ,但事实证明,即使使用“ Apache 2.0 Handler”服务器API,这也被填充了。SERVER['argc']
使用 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_SAPI
php_sapi_name()
这将始终有效。(如果 PHP 版本是 4.2.0 或更高版本)
define('CLI', PHP_SAPI === 'cli');
这使得它很容易在脚本的顶部使用:
<?php PHP_SAPI === 'cli' or die('not allowed');