webman中如何知道我是否在 “CLI”下。

南部荒人

webman中如何知道我是否在 “CLI”下。

我在webman中,引入了webman/console。我需要在Logger中区分是console调用了还是app/controller中调用了。

众所周知,我无法通过 php_sapi_name() == 'cli' 来判定。

我该如何知道当前是Console还是Controller

843 4 1
4个回答

北月
function is_console(): bool
{
    global $argv;
    return $argv[0] === 'webman';
}
  • 南部荒人 2023-03-05

    妙,实在是妙~~ 谢谢 @北月

  • liziyu 2023-03-05

    这个global $argv;在哪里有定义哈?

  • 北月 2023-03-05

    $argv 变量包含当运行于命令行下时传递给当前脚本的参数的数组,第一个参数是脚本相对路径,比如webmanstart.php ,如果是在上一层目录,比如这样子执行: php webman/start.php start ,那么第一个参数就是 webman/start.php
    $argc 变量包含当运行于命令行下时传递给当前脚本的参数的数目。
    可以查看一下相关文档:
    $argv
    $argc

  • liziyu 2023-03-05

    感觉这个与c有点相似。明白了,谢谢大佬!~

  • 北月 2023-03-05

    PHP 里面确实有很多 C 的概念

oliusha
  • 南部荒人 2023-03-05

    嗯嗯。谢谢 @oliusha。在自定义worker中的确可以这样。 我想全局场景中获取。

南部荒人

有点尴尬了。

场景:我以 php start.php start 的方式启动服务,同时定义了一个自定义进程,自定义进程监听8888。

在webman的http场景中,我用 @北月 提供的方法判定 $argv[0] === 'webman'是否在CLI模式下没问题的。但是这时候在自定义进程中,就无效了。。。

  • 南部荒人 2023-03-12

    在使用Logger的时候,可以自定义extra,我想在http的场景中塞入session_id,用以后续追踪用户, 但是在CLI下,我想extra中塞入getmypid(), 每次使用info/error/warning的时候都要手动塞上比较麻烦,我想在全局通过判定CLI来直接塞上。

南部荒人

结贴了。

function is_cli(){
   return !\request();
}
  • 暂无评论
年代过于久远,无法发表回答
🔝