Apache2环境下PHP5.6与7.2并行运行,切换至5.6失败求助
在Apache2中切换PHP5.6无效的问题排查与解决
我最近在Ubuntu的Apache2环境里折腾并行运行PHP5.6和PHP7.2,结果发现切换到PHP7.2一切正常,但切回PHP5.6的时候完全没效果。先说说我已经做了哪些操作:
已完成的操作步骤
- 添加了ondrej的PHP源并更新了系统包:
sudo add-apt-repository ppa:ondrej/php sudo apt-get update - 安装了PHP5.6及必备的扩展:
sudo apt-get install php5.6 php5.6-mysql php5.6-mbstring libapache2-mod-php5.6 - 切换到PHP7.2的命令是有效的,执行后版本成功切换:
sudo a2dismod php5.6 ; sudo a2enmod php7.2 ; sudo service apache2 restart sudo update-alternatives --set php /usr/bin/php7.2 - 但尝试切回PHP5.6的时候,我输入命令到一半就发现不对了:
sudo a2dismod php7.2 ; sudo a2enmod php5...
针对这个问题,我整理了几个排查和解决的方法:
问题排查与解决方法
1. 先补全并执行完整的切换命令
你切换回PHP5.6的命令明显没写完,完整的正确命令应该是这样的:
sudo a2dismod php7.2 && sudo a2enmod php5.6 && sudo service apache2 restart
另外别忘了同步更新CLI的PHP版本(如果你需要命令行也用PHP5.6的话):
sudo update-alternatives --set php /usr/bin/php5.6
这里建议用&&代替;,这样前一个命令执行成功才会继续下一个,能避免一些因为前序命令失败导致的错误状态。
2. 验证Apache的PHP模块加载状态
执行下面的命令,看看Apache当前实际加载的是哪个PHP模块:
apache2ctl -M | grep php
如果输出里有php5.6_module (shared),说明模块已经加载成功;如果还是显示php7.2的模块,那你可以去/etc/apache2/mods-enabled/目录下看看,手动删掉php7.2相关的软链接,再重新启用php5.6模块后重启Apache。
3. 针对特定站点指定PHP版本(可选)
如果只是个别站点需要用PHP5.6,全局切换反而麻烦,那可以直接在站点的VirtualHost配置里指定PHP版本,比如:
<FilesMatch \.php$> SetHandler application/x-httpd-php5.6 </FilesMatch>
修改完配置后记得重启Apache,这样这个站点就会单独用PHP5.6,其他站点还是用默认的PHP7.2,非常灵活。
4. 验证切换结果
不管用哪种方法切换,最后都建议创建一个简单的info.php文件来确认:
<?php phpinfo(); ?>
把这个文件放到网站根目录,访问它之后看页面顶部的PHP版本信息,就能确定是不是真的切换成功了。
内容的提问来源于stack exchange,提问作者Imnotapotato
相关产品推荐
相关产品推荐

