我需要确定PHP的当前调用是来自命令行(CLI)还是来自Web服务器(在我的情况下,是带有mod_php的Apache).
任何推荐的方法?
Jor*_*nes 297
php_sapi_name
是您要使用的函数,因为它返回接口类型的小写字符串.另外,还有PHP常量PHP_SAPI
.
可在此处找到文档:http://php.net/php_sapi_name
例如,要确定是否从CLI运行PHP,可以使用此函数:
function isCommandLineInterface()
{
return (php_sapi_name() === 'cli');
}
Run Code Online (Sandbox Code Playgroud)
Sil*_*oon 36
我已经使用这个功能几年了
function is_cli()
{
if ( defined('STDIN') )
{
return true;
}
if ( php_sapi_name() === 'cli' )
{
return true;
}
if ( array_key_exists('SHELL', $_ENV) ) {
return true;
}
if ( empty($_SERVER['REMOTE_ADDR']) and !isset($_SERVER['HTTP_USER_AGENT']) and count($_SERVER['argv']) > 0)
{
return true;
}
if ( !array_key_exists('REQUEST_METHOD', $_SERVER) )
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
kro*_*we2 31
php_sapi_name()
实际上不是执行此检查的最佳方法,因为它取决于检查许多可能的值.php-cgi二进制文件可以从命令行,shell脚本或作为cron作业调用,并且(在大多数情况下)这些也应该被视为'cli'但是php_sapi_name()
会为这些返回不同的值(请注意,这不是'在普通版本的PHP的情况下,你希望你的代码在任何地方工作,对吗?).更不用说明年可能有新的方法来使用我们现在无法知道的PHP.当我关心的只是天气时,我宁愿不考虑它,我应该用HTML包装我的输出.
幸运的是,PHP有办法专门检查这一点.只使用http_response_code()
没有任何参数,如果从Web服务器类型环境运行它将返回TRUE,如果从CLI类型环境运行则返回FALSE.这是代码:
$is_web=http_response_code()!==FALSE;
Run Code Online (Sandbox Code Playgroud)
如果你在调用它之前意外地(?)从运行CLI(或类似CLI)的脚本设置响应代码,这甚至可以工作.
Mar*_*ler 23
我认为他的意思是,如果正在调用PHP CLI,或者它是来自Web请求的响应.最好的方法是使用php_sapi_name()
它,如果它正在运行Web请求将回显Apache,如果它正在运行.
列出一些从php 文档中获取的php_sapi_name()
:
rba*_*kar 13
这应该处理所有的情况(包括php-cgi)
return (php_sapi_name() === 'cli' OR defined('STDIN'));
Run Code Online (Sandbox Code Playgroud)
尝试
isset($_SERVER['REQUEST_METHOD'])
Run Code Online (Sandbox Code Playgroud)
如果已设置,则您正在使用浏览器。
或者,您可以检查是否
isset($_SERVER['argv'])
Run Code Online (Sandbox Code Playgroud)
但在 Windows CLI、IDK 上可能并非如此。
function is_cli() {
return !http_response_code();
}
Run Code Online (Sandbox Code Playgroud)
例:
if (is_cli()) {
echo 'command line';
} else {
echo 'browser';
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
78973 次 |
最近记录: |