报错
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/horizon[v3.0.0, ..., v3.7.2] require ext-pcntl * -> it is missing from your system. Install or enable PHP's pcntl extension.
- Root composer.json requires laravel/horizon ^3.0 -> satisfiable by laravel/horizon[v3.0.0, ..., v3.7.2].
To enable extensions, verify that they are enabled in your .ini files:
- E:\phpstudy_pro\Extensions\php\php7.3.4nts\php.ini
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-pcntl` to temporarily ignore these required extensions.
问题原因
我们简单翻译一下提示信息就可以看到,整体说的是 laravel/horizon 依赖或者需要 ext-pcntl 拓展,我们可以在 php.ini 中修改并使用。这就是大概的意思,但是我去 php.ini 找了,没有找到。
解决办法
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true,
"platform": {
"ext-pcntl": "7.2",
"ext-posix": "7.2"
}
},
可以看到,我们可以在 composer.json 文件里面的 config 里面加上 platform 配置,楼主运行了一下,完美解决。可是这是为什么呢?从 stackoverflow 上找到了答案,该错误表明未安装 PCNTL PHP 扩展,并且 Horizon 需要提供此扩展的 PHP 环境。
PCNTL 扩展为 Unix 风格的进程管理和信令提供了一个 API。由于其固有的重点是仅在类似 Unix 或 Linux 的操作系统中可用的功能,因此此扩展不支持 Windows,如文档中所述:
注意:此扩展名在 Windows 平台上不可用。
通过此 API,Laravel Horizon 使用 PHP 7.1 新增的异步信号处理功能来管理队列工作进程。因此,Horizon 当前不支持 Windows,Windows 开发人员需要使用虚拟环境(例如 Homestead)来安装和运行 Horizon。
我们加上这两项就可以安装的原因就是我们设置忽略了版本匹配,如果有不对的地方,欢迎大家修改指正。
转载自
Comments | NOTHING