PopOS 22.4如何将PHP 8.1回退为CLI可正常调用的8.0版本
首先先定位命令路径冲突问题,这是update-alternatives配置后不生效的最常见原因。
第一步:确认当前执行
php时实际调用的文件路径which php- 如果输出路径不是
/usr/bin/php,比如包含.phpbrew、linuxbrew、.homebrew字样,说明你之前装的第三方版本管理工具的路径在PATH环境变量里优先级高于系统路径,直接编辑你当前shell的配置文件(~/.bashrc、~/.zshrc、~/.profile,匹配你自己用的shell),把对应工具初始化PHP环境的行注释掉,保存后执行source 对应配置文件路径,或者直接重开终端。 - 如果输出就是
/usr/bin/php,继续下一步排查。
- 如果输出路径不是
第二步:校验软链接链路是否正常
先看/usr/bin/php的指向:ls -l /usr/bin/php正常被update-alternatives管理的软链接应该指向
/etc/alternatives/php,如果这里直接指向了/usr/bin/php8.1,说明之前的手动操作覆盖了alternatives的软链接,执行以下命令重建:sudo rm /usr/bin/php sudo ln -s /etc/alternatives/php /usr/bin/php再校验alternatives层的软链接指向:
ls -l /etc/alternatives/php如果这里没有指向
/usr/bin/php8.0,重新注册两个PHP版本到alternatives列表再切换:sudo update-alternatives --remove-all php sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.0 80 sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 70 sudo update-alternatives --set php /usr/bin/php8.0第三步:同步关联命令配置,适配Laravel开发场景
只切换php二进制本身会导致phpize、php-config、phar等关联命令还是调用8.1版本,后续装composer扩展、跑php-cs-fixer会出兼容性问题,批量配置即可:for cmd in phar phar.phar phpize php-config; do sudo update-alternatives --remove-all $cmd sudo update-alternatives --install /usr/bin/$cmd $cmd /usr/bin/$cmd8.0 80 sudo update-alternatives --install /usr/bin/$cmd $cmd /usr/bin/$cmd8.1 70 sudo update-alternatives --set $cmd /usr/bin/$cmd8.0 done第四步:清除缓存验证结果
先清掉当前shell的命令路径缓存,避免旧缓存干扰:hash -r再执行
php -v,如果输出显示PHP 8.0.x版本即为配置成功,后续CLI下所有PHP相关调用(包括composer、php-cs-fixer)都会默认使用8.0版本,不需要修改Apache配置,也不依赖phpbrew、homebrew的版本管理能力。
注意:如果后续还要用phpbrew或者homebrew管理其他PHP版本,记得把对应工具的PATH配置放在系统路径后面,避免抢占系统默认PHP的调用优先级。
内容的提问来源于stack exchange,提问作者MES5464

