artisan的option明确说明要以--为前缀:Options, like arguments, are another form of user input. Options are prefixed by two hyphens (--) when they are specified on the command line.
又分析了一下,handle中示例是以global $argv来赋值参数,Worker.php中取的是$_SERVER['argv'],前者赋值后产生了一个深拷贝副本,所以并没有改变到后者的值!!!!
--d
改成-d
试下php artisan workerman start -d
The "-d" option does not exist.
在handle里加日志看了action和option都没有问题:
[2020-11-16 09:33:52] local.INFO: action:start
[2020-11-16 09:33:52] local.INFO: option:-d
源码改了两个地方暂时没问题了,看上去是handle里对argv的赋值处理并没有能够传递到Worker.php,需要看看怎样处理更为优雅。
你看下为什么 artisan 无法传递
-d
吧。artisan的option明确说明要以--为前缀:Options, like arguments, are another form of user input. Options are prefixed by two hyphens (--) when they are specified on the command line.
又分析了一下,handle中示例是以global $argv来赋值参数,Worker.php中取的是$_SERVER['argv'],前者赋值后产生了一个深拷贝副本,所以并没有改变到后者的值!!!!
所以修改Command中的argv赋值方法为直接向$_SERVER['argv]进行赋值,问题解决!
看到网上laravel整合workerman的文章都是操作的global $argv;,我重新发个版本,把$_SERVER['argv]操作改回操作 $argv;
[/bow]
更新到4.0.16或者后续的更高版本,已经改回操作 global $argv;
我也遇到此类问题了!我的这两种方式获取的参数是相同的,但是也是启动不了
php artisan workman start --d
----------------------- WORKERMAN -----------------------------
Workerman version:4.0.19 PHP version:7.3.4
------------------------ WORKERS -------------------------------
worker listen processes status
打印两种方式获取到的参数是一样的,但是也启动不了
array:4 [
0 => "artisan"
1 => "workman"
2 => "start"
3 => "d"
]
array:4 [
0 => "artisan"
1 => "workman"
2 => "start"
3 => "d"
]