Mac安装Workerman提示pcntl缺失,本质是PHP CLI未加载该内置扩展,需确认并编辑CLI实际读取的php.ini文件,解注释extension=pcntl和extension=posix两行,再验证php -m输出是否包含二者;原生/usr/bin/php自macOS 10.15起已移除pcntl支持,必须改用Homebrew安装的PHP。

Mac系统安装Workerman时提示pcntl扩展缺失,本质是PHP CLI模式未加载该内置扩展,不是下载安装包的问题——macOS自带PHP或Homebrew安装的PHP默认都注释掉了pcntl和posix两行,必须手动解注释并确认CLI实际读取的是哪个php.ini文件。
确认当前CLI用的php.ini路径
终端执行 php --ini,重点看Loaded Configuration File这一行输出的完整路径。常见情况有:
• Homebrew PHP 8.1:/usr/local/etc/php/8.1/php.ini
• macOS原生PHP:/etc/php.ini(可能不存在,需先复制模板)
• MAMP或XAMPP:路径在应用安装目录内,不能直接改系统级配置
如果输出显示“Loaded Configuration File: (none)”,说明PHP CLI根本没加载任何ini文件,后续所有修改都无效。
解注释pcntl和posix扩展
用文本编辑器打开上一步确认的php.ini文件,搜索extension=pcntl和extension=posix两行。
把这两行开头的分号;删掉,保存文件。
【注意】不要只改Web服务器(如Apache/Nginx)用的php.ini,CLI模式用的是另一份!比如MAMP用户常误改了htdocs下的php.ini,而CLI仍读取/usr/local/bin/php对应的配置。
验证扩展是否真实启用
终端运行:php -m | grep -E "pcntl|posix"
如果输出包含pcntl和posix,说明成功;若为空,继续排查:
① 检查php.ini路径是否真被CLI加载:执行/usr/bin/php --ini(或Homebrew路径如/opt/homebrew/bin/php --ini),对比输出的Loaded Configuration File是否与你修改的文件一致;
② 若路径对但仍未生效,检查该php.ini里是否有disable_functions禁用了pcntl_fork等函数;
③ macOS原生PHP(如/usr/bin/php)从10.15起已移除pcntl支持,必须换用Homebrew安装的PHP版本。
Homebrew PHP用户补装pcntl(极少数情况)
方法一:重装带pcntl的PHP
执行brew uninstall php@8.1 && brew install php@8.1,Homebrew默认启用pcntl,重装后无需手动改ini。
方法二:手动编译pcntl(仅当php -v显示版本但php -m不显示pcntl时)
① 进入PHP源码ext/pcntl目录(需提前下载对应版本源码)→
② 执行/opt/homebrew/bin/phpize →
③ ./configure --with-php-config=/opt/homebrew/bin/php-config →
④ make && sudo make install
⑤ 在php.ini中写入绝对路径:extension=/opt/homebrew/lib/php/20210902/pcntl.so(路径以make install输出为准)
【关键】macOS原生/usr/bin/php无法启用pcntl,强行编译会失败,必须切换到Homebrew PHP。

















