环境:Linux
PHP版本:8.2
框架程序:ThinkPHP8
扩展:topthink/think-worker、workerman3.5
$reptile = reptile::where('status', 1)->select()->toArray();
// 创建 Worker 实例
foreach ($reptile as $key => $value) {
$reptileWorker = new reptileWorker([
'reptile_id' => $value['id'],
'reptile' => $value['reptile'],
'worker_id' => sprintf("%02d", $value['id']),
]);
$reptileWorker->name = 'wo_' . $value['id']; // 设置 Worker 名称
$reptileWorker->run(); // 启动当前 Worker 实例
}
Worker::runAll();
----------------------------------------------------- WORKERS -----------------------------------------------------
proto user worker listen processes status
tcp root wo_1 http://0.0.0.0:2346 1 [OK]
tcp root wo_2 http://0.0.0.0:2346 1 [OK]
tcp root wo_3 http://0.0.0.0:2346 1 [OK]
tcp root wo_4 http://0.0.0.0:2346 1 [OK]
tcp root wo_5 http://0.0.0.0:2346 1 [OK]
tcp root wo_6 http://0.0.0.0:2346 1 [OK]
tcp root wo_7 http://0.0.0.0:2346 1 [OK]
round(): Passing null to parameter #2 ($precision) of type int is deprecated in file /mnt/d/PHP-code/Test/vendor/workerman/workerman/Worker.php on line 1919
在单独创建Worker的时候是正常的,创建多个的时候运行报错。
我在论坛查询问题了解过是因为我用的是workerman3.5版本太低,PHP8.2,但是因为这个项目无法更改扩展等问题,所以我有点无从下手。如果能通过修改workerman源代码或者其他方法解决的话就太好,求帮忙兄弟们
这个报错信息指的是在 PHP 中调用 round() 函数时,传入的第二个参数($precision)为 null,而 PHP 8.1 及以后的版本中,这种做法被标记为 弃用(deprecated),因为 round() 的第二个参数要求是一个 整数 类型。
ai回答要改成 $loadavg = \function_exists('sys_getloadavg') ? \array_map(function($val) { return round($val, 2); }, \sys_getloadavg()) : array('-', '-', '-');