我需要确定当前对PHP的调用是来自命令行(CLI)还是来自web服务器(在我的情况下,使用mod_php的Apache)。
有什么推荐方法吗?
我需要确定当前对PHP的调用是来自命令行(CLI)还是来自web服务器(在我的情况下,使用mod_php的Apache)。
有什么推荐方法吗?
当前回答
// Detect CLI calls
define("IS_CLI_CALL",( strcmp(php_sapi_name(),'cli') == 0 ));
if(IS_CLI_CALL){
//do you stuff here
}
其他回答
基于银月的答案上面,我使用这个函数返回正确的换行:
/**
* Linebreak function
* @return "/n" if cli, else return <br>
*/
protected static function lb(){
return (defined('STDIN') || php_sapi_name() === 'cli' || isset($_ENV['SHELL']) ||
(empty($_SERVER['REMOTE_ADDR']) && !isset($_SERVER['HTTP_USER_AGENT']) && count($_SERVER['argv']) > 0) ||
!isset($_SERVER['REQUEST_METHOD'])) ? "\n" : "<br>";
}
Try
isset($_SERVER['REQUEST_METHOD'])
如果设置了,则是在浏览器中。
或者,你可以检查是否
isset($_SERVER['argv'])
但在windows CLI、IDK上可能不是这样。
function is_cli() {
return !http_response_code();
}
例子:
if (is_cli()) {
echo 'command line';
} else {
echo 'browser';
}
我试一试:
echo exec('whoami');
通常网络服务器在不同的用户名下运行,所以这应该是说明问题的。
这应该处理所有的情况(包括php-cgi)
return (php_sapi_name() === 'cli' OR defined('STDIN'));