Linux изменить версию php

How to change PHP version in Ubuntu 20.04 console?

How can I change the PHP version used in console on Ubuntu 20.04? I have all versions in the /etc/php folder, but I don’t know where the configuration for the command line version is.

6 Answers 6

You can do this with update-alternatives . If you would like to do this interactively, you can do this:

sudo update-alternatives --config php 

If you like to specifically choose the PHP version (via an alias or whatnot), you can do this:

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

Of course, be sure to change php7.4 to the actual version you want to switch between.

Ok but it shows me this message: There is only one alternative in link group php (providing /usr/bin/php): /usr/bin/php7.2 Nothing to configure . I can see the usr/bin folder and theare really only php 7.2. Dont know what need to add there.

Please use following command which will ask you to select a number against your required PHP version

sudo update-alternatives --config php 

Then select your choice and press enter.

Ok but it shows me this message: There is only one alternative in link group php (providing /usr/bin/php): /usr/bin/php7.2 Nothing to configure . I can see the usr/bin folder and theare really only php 7.2. Dont know what need to add there.

@Čamo it means you don’t have multiple versions installed. You can install other versions before switch to other version.

Did you install the cli? Do this first:

$ sudo apt install php7.4-cli 

After that, you should see it listed under update-alternatives

$ update-alternatives --list php /usr/bin/php7.4 /usr/bin/php8.1 

Thank you this answer work great for me, of course now in 2023 I’ve adapt it for PHP 8.2: apt install php8.2-cli And now when I do a «php -v» I get the following answer: PHP 8.2.3 (cli) (built: Feb 14 2023 16:57:30) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.3, Copyright (c) Zend Technologies with Zend OPcache v8.2.3, Copyright (c), by Zend Technologies Thank you!

i just try in Ubuntu20.04 and it works.

// to show the list php installed: sudo update-alternatives —config php

// choose number version that you wanna switch screenshoot switch php version in ubtuntu

alias setphp="sudo update-alternatives --config php;sudo update-alternatives --config phar; update-alternatives --config phar.phar; a2dismod php*.*;systemctl restart apache2" 

Put the above alias in ~/.bashrc :

Читайте также:  Открыть архив tar linux

Then just run this command:

a2enmod php # like, a2enmod php7.4 

Now you can run the command setphp from your terminal.

There are two methods to switch php versions on the command line ubuntu.

Run each command one by one and input the number of the php version you want to change.

sudo update-alternatives --config php sudo update-alternatives --config phar sudo update-alternatives --config phar.phar sudo service apache2 restart 

If you want to change PHP 5.6 to 7.4 just run the below codes.

sudo a2dismod php5.6 sudo a2enmod php7.4 sudo service apache2 restart 

If you want to change from PHP 7.4 to 5.6 run the below codes.

sudo a2dismod php7.4 sudo a2enmod php5.6 sudo service apache2 restart 

Источник

Жонглируем версиями PHP в системе

Проблема “ хочу новую версию %software% на моем стареньк … стабильном Debian/CentOS…” так же стара, как *nix-мир. Способов добиться желаемого хватает. Есть масса решений как притащить в систему несколько версий одного и того же софта. Но дальше хочется не просто иметь ещё одну версию, но и управлять тем, какая из версий доступна в системе по умолчанию, для конкретных приложений или пользователей.

Что делать, если хочется сменить системную версию PHP на одну из кастомных сборок? Давайте отталкиваться от того, что у вас на сервере уже установлено несколько версий PHP и вы хотите, чтобы в консоли команда php была конкретной версии, отличающаяся от той, что шла с системой. В этой статье я расскажу, как правильно это настроить, чтобы не было проблем с будущими пакетными обновлениями.

В качестве примера возьмём сервер на CentOS 7, где установлен родной PHP:

# php -v PHP 5.4.16 (cli) (built: May 12 2016 13:45:17) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.0.12, Copyright (c) 2002-2015, by ionCube Ltd.

Также на сервере установлен наш Plesk с парой своих сборок PHP:

# rpm -qa | grep plesk-php.*-release plesk-php56-release-5.6.22-centos7.16052711.x86_64 plesk-php70-release-7.0.7-centos7.16052710.x86_64

Допустим, мы хотим переключить систему на использование PHP 5.6 по умолчанию (переключать глобально PHP с версии 5.4 на 7 как-то сс… страшно — чему-то в системе может поплохеть от такого). Бинарь PHP 5.6 лежит у нас тут:

# /opt/plesk/php/5.6/bin/php -v PHP 5.6.22 (cli) (built: May 27 2016 11:45:28) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.0.18, Copyright (c) 2002-2015, by ionCube Ltd. with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Как же сделать так, чтобы система использовала эту, нужную нам, версию PHP?

Читайте также:  Cmd file for linux

Сначала посмотрим на системную переменную PATH

# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

В ней перечислен список директорий, в которых ищутся программы по имени. Главный нюанс — поиск в директориях происходит последовательно и используется первый найденный результат. Текущий путь до текущего бинарника PHP мы можем увидеть с помощью команды:

Как видно из PATH , /usr/local/bin находится в списке раньше, чем /usr/bin . Значит, если мы поместим ссылку на альтернативную версию PHP “пораньше”, в /usr/local/bin , то именно она и будет использоваться при вызове команды php вместо /usr/bin/php . Мы можем создать эту ссылку руками (и всё даже будет работать), но правильнее использовать специально созданную для этих целей утилиту update-alternatives (в CentOS это просто alternatives , но есть симлинка update-alternatives , поэтому дальше будем оперировать именно этой командой, как универсальной для Debian/Ubuntu/CentOS/и т.д.).

Теперь, давайте зарегистрируем все доступные версии PHP с помощью этой команды:

# update-alternatives --install /usr/local/bin/php php /opt/plesk/php/5.6/bin/php 10 # update-alternatives --install /usr/local/bin/php php /opt/plesk/php/7.0/bin/php 20 # update-alternatives --install /usr/local/bin/php php /usr/bin/php 30

Цифры 10, 20 и 30 — это приоритет. Он работает для автоматического выбора, если администратор сам не выбрал конкретную версию. Самое большое число определяет выбор «по умолчанию».

Проверим, что php теперь указывает на созданную командой симлинку:

# update-alternatives --list | grep php php auto /usr/bin/php # update-alternatives --display php php - status is auto. link currently points to /usr/bin/php /opt/plesk/php/5.6/bin/php - priority 10 /opt/plesk/php/7.0/bin/php - priority 20 /usr/bin/php - priority 30 Current `best' version is /usr/bin/php.

Давайте разберемся, что же update-alternatives сделала для нас:

# which php /usr/local/bin/php # ls -l /usr/local/bin/php lrwxrwxrwx. 1 root root 21 Jul 2 10:03 /usr/local/bin/php -> /etc/alternatives/php # ls -l /etc/alternatives/php lrwxrwxrwx. 1 root root 26 Jul 2 10:03 /etc/alternatives/php -> /usr/bin/php

Как видно, она создала цепочку симлинок и теперь по требованию просто меняет промежуточную симлинку на нужный нам бинарь.

# php -v PHP 5.4.16 (cli) (built: May 12 2016 13:45:17) . 

То есть, мы успешно настроили группу PHP в update-alternatives , где по умолчанию в автоматическом режиме выбран системный PHP. Сейчас у нас есть возможность переключить команду PHP на любую другую версию..

Давайте переключимся на PHP версии 5.6, которая идет в поставке с Plesk’ом:

# update-alternatives --config php There are 3 programs which provide 'php'. Selection Command ----------------------------------------------- 1 /opt/plesk/php/5.6/bin/php 2 /opt/plesk/php/7.0/bin/php *+ 3 /usr/bin/php Enter to keep the current selection[+], or type selection number: 1

Проверяем, что переключение произошло:

# php -v PHP 5.6.22 (cli) (built: May 27 2016 11:45:28) … # update-alternatives --display php php - status is manual. link currently points to /opt/plesk/php/5.6/bin/php … 

Все отлично работает. Теперь в системе используется нужная нам версия PHP и я не опасаюсь, что эта настройка слетит при следующих пакетных обновлениях.

Читайте также:  Kali linux сброс пароля windows 10

С помощью update-alternatives можно выбирать не только версию PHP, но и многие другие вещи, например разные версии phpunit или редактор по умолчанию в системе. Подход этот универсален для различных систем. Не изобретая своего велосипеда, используя существующие инструменты, вы можете быть уверенным, что не устроили для ваших коллег квеста “Ну почему оно так работает?!”. Настраивайте свою систему правильно.

P.S. Приглашаю пофлеймить про phpenv в комментарии 🙂

Источник

Как изменить версию php, которую использует веб-сервер?

Module php7.2 already disabled
Considering dependency mpm_prefork for php7.4:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
Considering conflict php5 for php7.4:
Module php7.4 already enabled
Job for apache2.service failed because the control process exited with error code.
See «systemctl status apache2.service» and «journalctl -xe» for details.

Как видим отключение старой и включение новой версии происходит. Но апаче не перезапускается. Возможно что работаю через nginx
Команда journalctl -xe выводит

Aug 16 08:44:53 my.site sudo[23332]: pam_unix(sudo:session): session closed for user root
Aug 16 08:45:01 my.site CRON[23344]: pam_unix(cron:session): session opened for user root by (uid=0)
Aug 16 08:45:01 my.site CRON[23345]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Aug 16 08:45:01 my.site CRON[23344]: pam_unix(cron:session): session closed for user root
Aug 16 08:45:11 my.site sshd[23347]: Invalid user ubuntu from 111.111.11.111 port 60734
Aug 16 08:45:11 my.site sshd[23347]: pam_unix(sshd:auth): check pass; user unknown
Aug 16 08:45:11 my.sitesshd[23347]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser=
Aug 16 08:45:13 my.site sshd[23347]: Failed password for invalid user ubuntu from 111.111.11.111 port 60734 ssh2
Aug 16 08:45:13 my.site sshd[23347]: Received disconnect from 111.111.11.111 port 60734:11: Bye Bye [preauth]
Aug 16 08:45:13 my.site sshd[23347]: Disconnected from invalid user ubuntu 111.111.11.111 port 60734 [preauth]
Aug 16 08:45:22 my.site sshd[23349]: Invalid user musikbot from 222.22.22.222 port 58808
Aug 16 08:45:22 my.site sshd[23349]: pam_unix(sshd:auth): check pass; user unknown
Aug 16 08:45:22 my.site sshd[23349]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser=
Aug 16 08:45:24 my.site sshd[23349]: Failed password for invalid user musikbot from 101.32.14.126 port 58808 ssh2
Aug 16 08:45:24 my.site sshd[23349]: Received disconnect from 222.22.22.222 port 58808:11: Bye Bye [preauth]
Aug 16 08:45:24 my.site sshd[23349]: Disconnected from invalid user musikbot 222.22.22.222 port 58808 [preauth]

Простой 6 комментариев

Источник

Оцените статью
Adblock
detector