最稳妥的cli切换方式是直接修改/usr/bin/php软链接或用update-alternatives注册并选择版本;web环境(nginx/apache)必须单独配置php-fpm实例或启用对应模块,二者完全独立,不可互替。

直接改 /usr/bin/php 软链接或用 update-alternatives 是最稳妥的 CLI 切换方式;Web 环境(Nginx/Apache)必须单独配 PHP-FPM 实例或模块,不能只动 CLI。
怎么确认已安装哪些 PHP 版本
别猜路径,先实际扫描:
-
ls /usr/bin/php*—— 查看/usr/bin下所有带 php 前缀的可执行文件(如php7.4、php8.1) -
find /usr -name "php" -type f 2>/dev/null | grep -E "/bin/php$"—— 扫描常见安装目录下的真实二进制文件 -
php -v和which php—— 看当前生效的是哪个,避免误操作旧链接
注意:有些发行版(如 CentOS)默认不带 update-alternatives 对 PHP 的预注册,update-alternatives --list php 可能报 “no alternatives” —— 这说明还没注册过,不是没装版本。
用 update-alternatives 注册并切换 CLI 版本
这是 Debian/Ubuntu 系统推荐方式,管理干净、可回溯。关键点是「每个版本都要显式注册」+「优先级数字越大越优先」:
- 注册 PHP 8.1:
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 81 - 注册 PHP 7.4:
sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74 - 切换时运行:
sudo update-alternatives --config php,选编号后立即生效 - 别漏掉配套工具:同样要注册
phpize和php-config,否则编译扩展会失败(例如:sudo update-alternatives --install /usr/bin/phpize phpize /usr/bin/phpize8.1 81)
常见坑:注册时路径写错(比如写成 /usr/bin/php81 少了点),或权限不足导致软链接未更新;执行完 --config 后记得在新终端里跑 php -v,旧 shell 可能缓存了 PATH。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
Apache 或 Nginx 的 PHP 版本不随 CLI 切换而变
Web 服务和命令行是两套独立机制。CLI 切了,网站还跑在旧 PHP-FPM 或旧 Apache 模块上:
- Apache:需手动启停模块,例如
sudo a2dismod php7.4 && sudo a2enmod php8.1 && sudo systemctl restart apache2 - Nginx:修改站点配置里的
fastcgi_pass,指向对应 PHP-FPM socket,如unix:/run/php/php8.1-fpm.sock;改完必须sudo nginx -t && sudo systemctl reload nginx - 验证 Web 版本不能只信
phpinfo()输出的 “PHP Version”,还要看 “Loaded Configuration File” 路径是否匹配你预期版本的php.ini
最容易忽略的是:PHP-FPM 服务本身得先启用。执行 systemctl list-units | grep php-fpm,如果 php8.1-fpm.service 是 inactive,fastcgi_pass 再对也连不上。
自编译或非标准路径 PHP 怎么接入
如果你把 PHP 装在 /opt/php-8.2.5/bin/php 这类自定义路径,update-alternatives 依然可用,但要注意三点:
- 确保该路径下有完整工具链:
php、phpize、php-config都存在且可执行(chmod +x) - 注册时路径必须精确到可执行文件,不能只写目录;优先级建议设高一点(如 99),避免被系统包覆盖
- 若用宝塔面板,它不会识别这种路径 —— 面板只认它自己安装或通过软件商店添加的版本,自编译 PHP 需手动在站点配置中填绝对路径的
php-fpmsocket 或 TCP 地址
复杂点在于:不同 PHP 版本的 php.ini 位置、扩展目录(extension_dir)、OPcache 设置都可能不同,切版本后如果扩展加载失败或性能异常,第一反应不该是重装,而是检查 php --ini 和 php -m 输出的实际配置与模块路径。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










