Если у вас установлено несколько версий php в системе, то при вызове команды php в консоли, будет использоваться одна из них. Иногда необходимо для каких-то скриптов или сервисов управлять версией php в консоли. Я расскажу, как ее изменить.
Допустим на сервере Debian установлены 2 версии php — 5.6 и 7.0. Для начала проверим, какая версия используется в данный момент:
# php -v
PHP 7.0.19-1 (cli) (built: May 11 2017 14:04:47) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.19-1, Copyright (c) 1999-2017, by Zend Technologies
Посмотрим, где располагается сам бинарник php:
# which php
/usr/bin/php
Оказывается, что /usr/bin/php является символьной ссылкой. Посмотрим, куда она ведет:
# ls -l /usr/bin/php
/usr/bin/php -> /etc/alternatives/php
Это еще одна символьная ссылка. Смотрим, куда ведет она:
# ls -l /etc/alternatives/php
/etc/alternatives/php -> /usr/bin/php7.0
На седьмую версию php. Заменим ее на 5.6, которая у меня установлена по адресу /usr/local/bin/php. Редактируем символьную ссылку:
# ln -f -s /usr/local/bin/php /etc/alternatives/php
Проверяем текущую версию php в консоли:
# php -v
PHP 5.6.16 (cli) (built: Jun 22 2017 20:29:25)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
Все получилось. Теперь в консоли по-умолчанию будет использоваться нужная версия php. Можно проверять скрипты, не указывая полный путь к нужной версии.
Можно было поступить и по-другому. При вызове php в консоли, имя проверяется в переменной $PATH. Посмотреть ее значения можно командой:
# echo $PATH
/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin
Директории проверяются в том порядке, как они перечислены. Где будет найдено первое совпадение, тот файл и будет использоваться. В моем случае директория /usr/bin, где жила символьная ссылка на php7.0 стоит раньше, чем /usr/local/bin, где расположена php5.6. Можно было просто поменять местами эти директории в PATH и версия по-умолчанию станет 5.6, так как ее бинарник php будет найден раньше.
Допустим на сервере Debian установлены 2 версии php — 5.6 и 7.0. Для начала проверим, какая версия используется в данный момент:
# php -v
PHP 7.0.19-1 (cli) (built: May 11 2017 14:04:47) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.19-1, Copyright (c) 1999-2017, by Zend Technologies
Посмотрим, где располагается сам бинарник php:
# which php
/usr/bin/php
Оказывается, что /usr/bin/php является символьной ссылкой. Посмотрим, куда она ведет:
# ls -l /usr/bin/php
/usr/bin/php -> /etc/alternatives/php
Это еще одна символьная ссылка. Смотрим, куда ведет она:
# ls -l /etc/alternatives/php
/etc/alternatives/php -> /usr/bin/php7.0
На седьмую версию php. Заменим ее на 5.6, которая у меня установлена по адресу /usr/local/bin/php. Редактируем символьную ссылку:
# ln -f -s /usr/local/bin/php /etc/alternatives/php
Проверяем текущую версию php в консоли:
# php -v
PHP 5.6.16 (cli) (built: Jun 22 2017 20:29:25)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
Все получилось. Теперь в консоли по-умолчанию будет использоваться нужная версия php. Можно проверять скрипты, не указывая полный путь к нужной версии.
Можно было поступить и по-другому. При вызове php в консоли, имя проверяется в переменной $PATH. Посмотреть ее значения можно командой:
# echo $PATH
/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin
Директории проверяются в том порядке, как они перечислены. Где будет найдено первое совпадение, тот файл и будет использоваться. В моем случае директория /usr/bin, где жила символьная ссылка на php7.0 стоит раньше, чем /usr/local/bin, где расположена php5.6. Можно было просто поменять местами эти директории в PATH и версия по-умолчанию станет 5.6, так как ее бинарник php будет найден раньше.