sudo a2enmod php5.6,php -v仍然显示php 7.01冲突。

27

我正在尝试切换php版本,得到以下响应。 我已经尝试卸载mpm_prefork和mpm_worker,但仍然没有成功,有任何想法吗。

在Ubuntu 16.04上

sudo a2enmod php5.6

 Considering dependency mpm_prefork for php5.6:
 Considering conflict mpm_event for mpm_prefork:
 Considering conflict mpm_worker for mpm_prefork:
 Enabling module mpm_prefork.
 Considering conflict php5 for php5.6:
 Enabling module php5.6.
 To activate the new configuration, you need to run:
 service apache2 restart
6个回答

70

安装Ondřej Surý软件源

sudo add-apt-repository ppa:ondrej/php
安装PHP版本。
sudo apt install php5.6 php7.0 php7.1 php7.2 php7.3 php7.4 php8.0 php8.1

你的命令看起来是正确的。在测试之前,你是否重启了Apache?

sudo service apache2 restart

Ondřej Surý制作的php5.6 PHP 模块只能通过以下方式启用:

sudo a2dismod php7.0
sudo a2dismod php7.1
sudo a2dismod php7.2
sudo a2dismod php7.3
sudo a2dismod php7.4
sudo a2dismod php8.0
sudo a2dismod php8.1
sudo a2enmod php5.6
sudo update-alternatives --set php /usr/bin/php5.6
sudo service apache2 restart

我发现这个设置与除PREFORK外的任何其他MPM模块都不兼容。在启用php5.6模块之前,必须确保您先禁用所有其他MPM模块。

如果该模块无法启用,则可能需要尝试禁用其他MPM模块。

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

然后尝试重新启用模块,因为它应该自动启用正确的MPM。

$ sudo a2enmod php5.6
Considering dependency mpm_prefork for php5.6:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
Considering conflict php5 for php5.6:
Enabling module php5.6.
To activate the new configuration, you need to run:
  service apache2 restart

顺便提一下,我喜欢把这些命令放到我的'.bash_aliases'文件中,这样我总是可以方便地进行开发工作。

# Aliases - PHP
alias php.info='php -i'
alias php5.6='sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2dismod php7.2 && sudo a2dismod php7.3 && sudo a2dismod php7.4 && sudo a2dismod php8.0 && sudo a2dismod php8.1 && sudo a2enmod php5.6 && sudo update-alternatives --set php /usr/bin/php5.6 && sudo service apache2 restart'
alias php7.0='sudo a2dismod php5.6 && sudo a2dismod php7.1 && sudo a2dismod php7.2 && sudo a2dismod php7.3 && sudo a2dismod php7.4 && sudo a2dismod php8.0 && sudo a2dismod php8.1 && sudo a2enmod php7.0 && sudo update-alternatives --set php /usr/bin/php7.0 && sudo service apache2 restart'
alias php7.1='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2dismod php7.2 && sudo a2dismod php7.3 && sudo a2dismod php7.4 && sudo a2dismod php8.0 && sudo a2dismod php8.1 && sudo a2enmod php7.1 && sudo update-alternatives --set php /usr/bin/php7.1 && sudo service apache2 restart'
alias php7.2='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2dismod php7.3 && sudo a2dismod php7.4 && sudo a2dismod php8.0 && sudo a2dismod php8.1 && sudo a2enmod php7.2 && sudo update-alternatives --set php /usr/bin/php7.2 && sudo service apache2 restart'
alias php7.3='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2dismod php7.2 && sudo a2dismod php7.4 && sudo a2dismod php8.0 && sudo a2dismod php8.1 && sudo a2enmod php7.3 && sudo update-alternatives --set php /usr/bin/php7.3 && sudo service apache2 restart'
alias php7.4='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2dismod php7.2 && sudo a2dismod php7.3 && sudo a2dismod php8.0 && sudo a2dismod php8.1 && sudo a2enmod php7.4 && sudo update-alternatives --set php /usr/bin/php7.4 && sudo service apache2 restart'
alias php8.0='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2dismod php7.2 && sudo a2dismod php7.3 && sudo a2dismod php7.4 && sudo a2dismod php8.1 && sudo a2enmod php8.0 && sudo update-alternatives --set php /usr/bin/php8.0 && sudo service apache2 restart'
alias php8.1='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2dismod php7.2 && sudo a2dismod php7.3 && sudo a2dismod php7.4 && sudo a2dismod php8.0 && sudo a2enmod php8.1 && sudo update-alternatives --set php /usr/bin/php8.1 && sudo service apache2 restart'

GIST:https://gist.github.com/djravine/376e81a018ba2b980750a5578deb3935


很好的解决方案,使用别名,A+ - Alexey Palamar
@GAV 如果这个被接受为解决方案就太好了:D - Adan Rehtla

23

php -v(默认的PHP版本)

从PHP 7.0到PHP 5.6:

sudo a2dismod php7.0

sudo a2enmod php5.6

sudo update-alternatives --set php /usr/bin/php5.6

sudo service apache2 restart

从 PHP 5.6 到 PHP 7.0:

sudo a2dismod php5.6

sudo a2enmod php7.0

sudo update-alternatives --set php /usr/bin/php7.0

sudo service apache2 restart

8
为了使php7与你的服务器配合运行,你需要进行一些配置: 1. 确保删除所有php / php5的痕迹 打开终端并执行以下操作:
cd /etc/apache2/mods-enabled
ls -la

输出结果不应包含任何php5.conf或php5.load,但如果有,请执行以下操作:
# this is the proper way of disabling modules
sudo a2dismod php5

# run this only if the above command didn't remove the php5 sym-links
sudo rm php5.load
sudo rm php5.con

现在添加 php7.0.conf 和 php7.0.load 文件:
# this is the proper way of enabling modules
sudo a2enmod php7.0

# run this only if the above command didn't create the php7.0 sym-links
sudo ln -s php7.0.conf ../mods-available/php7.0.conf
sudo ln -s php7.0.load ../mods-available/php7.0.load
ls -la php* 的输出结果应该是这样的:
lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.conf -> ../mods-available/php7.0.conf
lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.load -> ../mods-available/php7.0.load

在处理模块之后,我们现在来到/etc/apache2/conf-enabled目录。通过sudo rm命令删除此处的php/php5痕迹。

然后,如果需要执行以下操作:

# the proper way of enabling configs
sudo a2enconf php7.0-cgi
sudo a2enconf php7.0-fpm

# do those commands only if the above didn't work out
sudo ln -s php7.0-cgi.conf ../conf-available/php7.0-cgi.conf
sudo ln -s php7.0-fpm.conf ../conf-available/php7.0-fpm.conf
ls -la php * 的输出应该如下所示:
lrwxrwxrwx 1 root root 33 Apr 21 17:00 php7.0-cgi.conf -> ../conf-available/php7.0-cgi.conf
lrwxrwxrwx 1 root root 33 Apr 21 17:01 php7.0-fpm.conf -> ../conf-available/php7.0

并重新启动Apache。

我刚刚按照以下步骤解决了这个问题。


你是怎么找到这个的?我永远不会走这么远!你是冠军!谢谢! - Rahul

6

如果sudo a2dismod php8.0不能禁用php8.0模块,且您无法切换php模块到php7.4,则可以尝试以下操作:

sudo a2disconf php8.0-fpm
sudo a2enmod php7.4
sudo systemctl reload apache2

1
只是试试看。
sudo a2dismod php7.2 &&  sudo update-alternatives --set php /usr/bin/php7.1 && sudo a2enmod php7.1 && sudo service apache2 restart

-1

a2enmod是与apache2相关的命令,而php -v是与php本身相关的命令。

当您运行以下命令时:

sudo a2enmod php5.6

你现在是在与 Apache2 交互,而不是 PHP [嘿 Apache,为我启用 PHP5 模块而不是 PHP7.0],这就是所说的。

要在您的服务器上启用 PHP5,您需要执行以下操作:

1)删除当前的 PHP 版本(即 7),然后下载您想要的 PHP 版本。

或者

2)同时下载 PHP 5 和 PHP 7。

我认为 php-version 将是一个很好的起点来做类似的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接