我有一个PHP脚本,需要确定它是通过命令行还是通过HTTP执行的,主要用于输出格式化.这样做的规范方法是什么?我原以为是要检查SERVER['argc']
,但事实证明这是填充的,即使使用'Apache 2.0 Handler'服务器API也是如此.
使用该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');
这使您可以轻松地在脚本的顶部使用:
"这使得在脚本顶部使用起来很容易"并不能让它听起来像两个单独的用途.是的,我是一名死灵法师.
你的第二个片段看起来像是不合理的,我希望`CLI或死('不允许');`
3> ya.teck..:这是Drupal 7的实现:drupal_is_cli():
function drupal_is_cli() { return (!isset($_SERVER['SERVER_SOFTWARE']) && (php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0))); }但Drupal 8 建议使用
PHP_SAPI === 'cli'
这也适用于运行php-cgi,太棒了!
4> Vinko Vrsalo..:我认为
$_SERVER['REMOTE_ADDR']将不会从CLI填充.
此外,$ _SERVER超全局中的所有HTTP_*键都不会从CLI填充,或者以刚才提到的正确方式执行:-)