我在webman中,引入了webman/console。我需要在Logger中区分是console调用了还是app/controller中调用了。
众所周知,我无法通过 php_sapi_name() == 'cli' 来判定。
我该如何知道当前是Console还是Controller
function is_console(): bool { global $argv; return $argv[0] === 'webman'; }
妙,实在是妙~~ 谢谢 @北月
这个global $argv;在哪里有定义哈?
global $argv;
$argv 变量包含当运行于命令行下时传递给当前脚本的参数的数组,第一个参数是脚本相对路径,比如webman 和 start.php ,如果是在上一层目录,比如这样子执行: php webman/start.php start ,那么第一个参数就是 webman/start.php。 $argc 变量包含当运行于命令行下时传递给当前脚本的参数的数目。 可以查看一下相关文档: $argv $argc
$argv
webman
start.php
php webman/start.php start
webman/start.php
$argc
感觉这个与c有点相似。明白了,谢谢大佬!~
c
PHP 里面确实有很多 C 的概念
PHP
C
https://www.workerman.net/doc/webman/others/bootstrap.html 看这里
嗯嗯。谢谢 @oliusha。在自定义worker中的确可以这样。 我想全局场景中获取。
有点尴尬了。
场景:我以 php start.php start 的方式启动服务,同时定义了一个自定义进程,自定义进程监听8888。
php start.php start
在webman的http场景中,我用 @北月 提供的方法判定 $argv[0] === 'webman'是否在CLI模式下没问题的。但是这时候在自定义进程中,就无效了。。。
在使用Logger的时候,可以自定义extra,我想在http的场景中塞入session_id,用以后续追踪用户, 但是在CLI下,我想extra中塞入getmypid(), 每次使用info/error/warning的时候都要手动塞上比较麻烦,我想在全局通过判定CLI来直接塞上。
结贴了。
function is_cli(){ return !\request(); }
妙,实在是妙~~ 谢谢 @北月
这个
global $argv;
在哪里有定义哈?$argv
变量包含当运行于命令行下时传递给当前脚本的参数的数组,第一个参数是脚本相对路径,比如webman
和start.php
,如果是在上一层目录,比如这样子执行:php webman/start.php start
,那么第一个参数就是webman/start.php
。$argc
变量包含当运行于命令行下时传递给当前脚本的参数的数目。可以查看一下相关文档:
$argv
$argc
感觉这个与
c
有点相似。明白了,谢谢大佬!~PHP
里面确实有很多C
的概念https://www.workerman.net/doc/webman/others/bootstrap.html
看这里
嗯嗯。谢谢 @oliusha。在自定义worker中的确可以这样。 我想全局场景中获取。
有点尴尬了。
场景:我以
php start.php start
的方式启动服务,同时定义了一个自定义进程,自定义进程监听8888。在webman的http场景中,我用 @北月 提供的方法判定 $argv[0] === 'webman'是否在CLI模式下没问题的。但是这时候在自定义进程中,就无效了。。。
在使用Logger的时候,可以自定义extra,我想在http的场景中塞入session_id,用以后续追踪用户, 但是在CLI下,我想extra中塞入getmypid(), 每次使用info/error/warning的时候都要手动塞上比较麻烦,我想在全局通过判定CLI来直接塞上。
结贴了。