Было бы довольно сложно отладить ваш двойной (тройной?) проблема с загрузкой без дополнительной информации. Несмотря на это, кажется, что переключать ОС просто для смены версий php было бы очень сложно.
Так что, поскольку вы открыты для других решений, я могу дать вам одно, которым я часто пользуюсь в наши дни. Обратите внимание, что я не php-разработчик, но это должно работать так же, как и другие языки.
Менеджер пакетов Nix
В настоящее время, когда мне нужно установить несколько версий какого-либо языка / инструмента, я использую nix.
Nix - мощный менеджер пакетов, я не буду вдаваться в подробности, просто знаю, что он позволяет вам легко и безопасно использовать несколько версий библиотек / инструментов и т.д. Вы можете установить его, запустив:
$ curl https://nixos.org/nix/install | sh
Как правило, завершение скрипта в оболочку не является хорошей идеей, вы можете просмотреть скрипт, а затем вручную загрузить и запустить его, перейдя по адресу https://nixos.org/nix/install.
После установки есть два быстрых способа начать.
Список версий
Во-первых, давайте посмотрим, какие версии доступны:
$ nix-env --query --available --attr-path php
nixpkgs.php56 php-5.6.29
nixpkgs.php php-7-0.14
nixpkgs.php71 php-7.1.0
Эта команда выводит список всех доступных в настоящее время версий php
(обратите внимание: при этом выполняется поиск по умолчанию для channel
nixpkgs, который вы получаете после установки, я не буду вдаваться здесь в подробности о том, что такое channel
nixpkgs, просто представьте его как известный набор пакетов). Для этой команды есть сокращение: nix-env -qaP php
.
Как видите, есть 3 версии. Теперь, как мы их используем?
Установить во временную оболочку
Это обычно, как я переключаюсь между версиями инструментов. Nix поставляется со встроенной командой nix-shell
которая позволяет вам устанавливать пакет (или пакеты) и запускать его только внутри оболочки. Для запуска php5.6:
$ nix-shell --packages php56
Это загрузит php56 (и его зависимости), и он будет доступен в только что запущенной оболочке:
[nix-shell:~]$ php --version
PHP 5.6.29 (cli) (built: Dec 8 2016 06:32:02)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Если вы запустите exit
вы будете извлечены из nix-shell
и возвращены в исходную оболочку, запустите там php
и вы увидите, что ее больше не существует (технически она все еще существует в хранилище nix в вашей системе, но это не то, что нужно). вам нужно беспокоиться только об этом), если, конечно, он уже не установлен в системе.
Теперь вы можете сделать то же самое для php7:
$ nix-shell --packages php
Я считаю, что это самый гибкий способ перехода между версиями.
Установить в пользовательском магазине Nix
Другой способ - установить в хранилище пользователя с помощью команды nix-env
.
$ nix-env --install --attr nixpkgs.php56
Теперь php
5 должен быть доступен, и на вашем пути, не нужно nix-shell
здесь:
$ php --version
PHP 5.6.29 (cli) (built: Dec 8 2016 06:32:02)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Чтобы установить php
7:
$ nix-env --install --attr nixpkgs.php
replacing old ‘php-5.6.29’
installing ‘php-7.0.14’
...
Как видите, он автоматически удаляет предыдущую версию. Чтобы удалить вручную, запустите nix-env -e php
. Наконец, вы можете получить список пакетов, установленных в хранилище пользователей, запустив nix-env -qa
.
Это едва касается поверхности того, что может сделать nix, если это в любом случае полезно, я бы предложил немного углубиться в это, поскольку, в зависимости от ваших потребностей (другие инструменты, управление пакетами php и т.д.), Вероятно, даже лучшие способы достичь того, что вы хотите.