如何从系统移除PHP 5.3.29并恢复PHP 5.6/7的切换功能?
这个问题我之前帮朋友排查过类似的,咱们一步步来搞定:
第一步:定位当前PHP 5.3的实际路径
首先得搞清楚系统现在调用的php命令到底在哪,执行这条命令:
which php
它会返回当前php的绝对路径,大概率是/usr/local/bin/php——这是编译安装PHP的默认位置,也是为啥一开始locate没找到的原因:编译安装的文件可能没被系统索引,或者locate的数据库太久没更新了。
第二步:更新系统文件索引,彻底查找PHP 5.3相关文件
如果which找到了路径,你可以直接验证这个文件的版本;要是想找全所有5.3的文件,先更新locate的数据库:
sudo updatedb
然后再执行精准搜索:
locate php5.3 # 或者用正则匹配更宽泛的结果 locate -r "php.*5\.3"
这下应该能找到PHP 5.3的完整安装目录了。
第三步:修复update-alternatives配置
你之前用update-alternatives切换版本没生效,核心原因是这个PHP 5.3没被加入到alternatives的管理列表里,系统直接优先调用了PATH里优先级更高的那个php(比如/usr/local/bin/php)。
方法1:把PHP 5.3加入alternatives再切换
先查看当前alternatives里的PHP条目:
update-alternatives --list php
如果里面没有你找到的5.3路径(比如/usr/local/bin/php),先把它加进去:
sudo update-alternatives --install /usr/bin/php php /usr/local/bin/php 1
这里最后的1是优先级,数值越低优先级越低,这样你之前的5.6和7的条目优先级会更高。之后再执行切换命令:
sudo update-alternatives --set php /usr/bin/php5.6 # 或者切换到7.x版本:sudo update-alternatives --set php /usr/bin/php7.x
跑完再执行php -v,应该就能看到你想要的版本了。
方法2:直接删除PHP 5.3(如果不需要的话)
要是你确定以后用不上PHP 5.3了,直接删掉它就行:
- 先删除当前的
php可执行文件/软链接:
sudo rm $(which php)
- 再根据
locate找到的安装目录,彻底删除整个PHP 5.3文件夹,比如路径是/usr/local/php5.3的话:
sudo rm -rf /usr/local/php5.3
之后再运行php -v,系统会自动调用update-alternatives里配置的默认PHP版本。
第四步:处理php.ini路径异常的问题
你提到php --ini显示配置文件路径在/usr/local/lib但实际没有文件,这是因为编译PHP 5.3时指定了这个路径,但没生成或复制php.ini过去。如果之后还要用5.3,可以从PHP源码包里复制模板文件过去:
# 假设你找到的PHP 5.3源码在/usr/src/php-5.3.29 sudo cp /usr/src/php-5.3.29/php.ini-development /usr/local/lib/php.ini
要是不用5.3的话,切换到5.6或7之后,再执行php --ini就能看到对应版本的正确配置路径了。
内容的提问来源于stack exchange,提问作者Sephy

