Мы все были в ситуации, когда у нас установлена одна версия. Возможно, именно эта версия была установлена в нашей операционной системе. Может быть, это версия в комплекте с MAMP / WAMP / XAMPP.
Как вы переключаетесь на эту версию PHP?
Как переключиться на одну версию, а затем снова вернуться?
Как вы переключаетесь на эту версию PHP, но только для одного приложения на вашем компьютере?
Сообщества Ruby и Python уже много лет имеют инструменты для решения этой проблемы. В PHP они тоже есть, но фанфар не было достаточно близко.
PHPbrew
PHPbrew — удивительный маленький инструмент, который вышел с 2012 года.
Он собирает и устанавливает версии PHP и помещает их в папку в вашем домашнем каталоге. Это означает, что вы можете управлять своими собственными версиями PHP. PHPbrew создаст различные версии, поместит их в домашнюю папку и позволит вам переключаться между ними в любое время.
Установка PHPbrew
Стоит отметить, что PHPbrew предъявляет немало требований , но их не сложно установить. Мне не нужно было ничего устанавливать, так как после более двух лет использования этого Macbook у меня были все требования.
Если вы являетесь пользователем Mac OS X — и я буду продолжать предполагать, что вы — то вы можете использовать Homebrew (безотносительно) для установки зависимостей.
brew install automake autoconf curl pcre re2c mhash libtool icu4c gettext jpeg libxml2 mcrypt gmp libevent brew link icu4c
Тогда вам нужно будет установить сам PHPbrew:
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew chmod +x phpbrew sudo mv phpbrew /usr/bin/phpbrew
Это загружает PHPbrew, добавляет разрешение «исполняемый файл» и перемещает его в каталог /usr/bin
.
Перейдите к их основным инструкциям по использованию, чтобы увидеть, как инициализировать вещи более подробно, но основы должны быть:
phpbrew init
После инициализации phpbrew вам нужно будет добавить эти строки в ваш .bashrc
:
echo "source $HOME/.phpbrew/bashrc" >> ~/.bashrc
Если вы используете не стандартную оболочку, такую как ZSH, вам нужно будет отредактировать файл .zshrc
.
Установка PHP с использованием PHPbrew
Прежде чем мы сможем установить версию PHP, нам нужно посмотреть, какие версии доступны для PHPbrew. Мы можем сделать это с помощью простой команды:
phpbrew known Available stable versions: 5.6+ 5.6.0 5.5+ 5.5.17, 5.5.16, 5.5.15, 5.5.14, 5.5.13, 5.5.12, 5.5.11, 5.5.10 5.4+ 5.4.33, 5.4.32, 5.4.31, 5.4.30, 5.4.29, 5.4.28, 5.4.27, 5.4.26 5.3+ 5.3.29, 5.3.28, 5.3.27, 5.3.26, 5.3.25, 5.3.24, 5.3.23, 5.3.22
На момент написания PHP 5.6.0 является последней версией, и версии PHP до 5.3 не поддерживаются.
Мы хотим установить PHP 5.6.0, чтобы мы могли использовать все замечательные новые функции, поэтому давайте попросим phpbrew сделать это:
phpbrew install 5.6.0
Обратите внимание, что если вы используете PHPbrew 1.14 или более раннюю версию, это может привести к сбою в некоторых системах с ошибкой о том, что XML не включен. Когда XML отсутствует, PHPbrew не сможет установить что-то под названием PEAR, и сборка будет прервана. Мы можем обойти это, используя опцию +xml_all
:
phpbrew install 5.6.0 +xml_all
Эта опция +xml_all
— это то, что PHPbrew называет «Вариантами», и их гораздо больше.
Варианты
При установке PHP самостоятельно, есть много вариантов включения или отключения функций. PHPbrew упрощает это и абстрагирует его, используя функцию под названием Variants .
Такие вещи, как драйверы базы данных, curl, библиотека изображений GD и JSON, доступны как дополнительные варианты.
В PHPbrew есть один вариант, называемый «default», который — вопреки ожиданиям — по умолчанию не используется. Вместо этого он действует как ярлык для включения следующих вариантов:
- BCMath
- BZ2
- календарь
- кли
- CType
- дом
- FileInfo
- фильтр
- МПК
- JSON
- mbregex
- MBstring
- Mhash
- pcntl
- п.д.о.
- POSIX
- Readline,
- Розетки
- xml_all
- застежка-молния
По default
может содержать больше, чем вам нужно, поэтому более детальный подход может быть вам больше по душе.
Допустим, мы просто хотим установить PHP 5.6.0 для создания приложения CLI, которое использует PDO для связи с базой данных SQLite. Для этого мы можем сделать следующее:
phpbrew install 5.6.0 +cli +pdo +sqlite +xml_all
Эта команда активирует расширение PDO , а sqlite
включает драйверы SQLite . Вариант cli
установит интерфейс командной строки, и xml_all
прекратит PHPbrew жаловаться на PEAR.
Если у вас возникли проблемы с установкой версии PHP, попробуйте выполнить ту же команду, но добавьте опцию -d
. Это отправит отладочную информацию на консоль, а не отправляет ее в файл журнала.
phpbrew install -d 5.6.0 +default +sqlite
Переключение версий PHP
Итак, на данный момент у нас должна быть установлена версия PHP.
Если наша установка прошла успешно, то PHPbrew выведет следующее сообщение:
Congratulations! Now you have PHP with php-5.6.0. To use the newly built PHP, try the line(s) below: $ phpbrew use php-5.6.0 Or you can use switch command to switch your default php version to php-5.6.0: $ phpbrew switch php-5.6.0
Первая из перечисленных команд позволит вам использовать PHP 5.6.0 во время сеанса консоли. Если вы закроете вкладку / окно или перезагрузите компьютер, то вернетесь к любой версии PHP по умолчанию.
Второй командный switch
переключит версию PHP по умолчанию, на которую PHPbrew перейдет в новом сеансе.
Давайте попробуем установить версию по умолчанию PHP 5.6.0 и посмотреть, работает ли она.
$ phpbrew switch php-5.6.0 $ php -v PHP 5.6.0 (cli) (built: Sep 30 2014 15:30:22) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
Вывод выше показывает нам именно то, что мы хотим видеть: PHP 5.6.0
.
Если мы сейчас попробуем установить более $ phpbrew known
PHP 5.5, мы снова сможем использовать $ phpbrew known
чтобы узнать, какие версии доступны. Выберите версию и попробуйте установить ее:
phpbrew install 5.5.17 +default +sqlite
Это установит PHP 5.5.17 с вариантами по default
и sqlite
. Чтобы затем использовать PHP 5.5.17, мы должны запустить другую команду:
$ phpbrew use php-5.5.17 $ php -v PHP 5.5.17 (cli) (built: Sep 30 2014 17:41:05) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
Теперь мы можем использовать PHP 5.5.17 в этом сеансе и снова использовать PHP 5.6.0. Поскольку мы использовали команду use
not switch
, когда мы открываем другую вкладку или окно, PHP 5.6.0 снова будет там.
PHPbrew vrs. система
Когда мы используем PHPbrew версию PHP, наша сессия bash будет использовать специальный путь для версии PHP. Мы можем узнать, какая версия используется с which
командой:
$ which php /Users/phil/.phpbrew/php/php-5.6.0/bin/php
Если мы хотим прекратить использовать эту PHP-версию phpbrew и вернуться к системной версии, мы можем использовать команду off
.
$ phpbrew off phpbrew is turned off. $ which php /usr/bin/php $ php -v PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
Еще раз мы используем версию по умолчанию. Возможно, вам это не нужно, но полезно знать, как избавиться от phpbrew. Команда which
также поможет вам с отладкой.
PHPbrew сам по себе является полезным инструментом, и вы можете найти это все, что вам нужно. Тем не менее, эти версии PHP могут стать сложными, когда вы обнаружите, что различные проекты нуждаются в дополнительных расширениях. PHPBrew может добавлять расширения PECL, но не для отдельных проектов.
Также предполагается, что вы можете вспомнить, какую версию PHP должно использовать приложение. Это может быть не по умолчанию, и запуск его под другой версией может вызвать проблемы.
Для этого нам нужно взглянуть на использование другого инструмента поверх PHPbrew.
VirtPHP
VirtPHP позволяет создавать изолированные среды PHP на одной машине, например в Python virtualenv. Это может показаться немного сложным, но идея проста.
Чтобы начать, вы отмечаете один каталог, который содержит приложение или компонент, и даете ему имя. Представьте, что мы работаем над «airpair-api» и его PHP-приложением, и мы хотим создать его в своей среде.
Затем мы можем установить расширения PECL, необходимые для «airpair-api», не затрагивая другие приложения.
Это теория, поэтому давайте посмотрим, как мы это делаем.
Установка virtPHP
Перейдите на страницу релизов virtPHP и найдите последнюю версию. Там будет ссылка «virtphp.phar», и вы захотите щелкнуть правой кнопкой мыши и скопировать этот URL.
$ wget https://github.com/virtphp/virtphp/releases/download/v0.5.1-alpha/virtphp.phar chmod +x virtphp.phar sudo mv virtphp.phar /usr/bin/virtphp
Теперь мы можем проверить, работает ли он:
$ virtphp -V virtPHP version v0.5.1-alpha 2014-08-13 16:05:47
Создание окружения
VirtPHP поддерживает непринужденный подход к тому, какая версия PHP используется. Когда вы создадите среду, она возьмет ту версию PHP, которая у вас есть в сеансе консоли, и будет ссылаться на нее.
Итак, прежде чем мы попытаемся создать новую среду, мы должны быть уверены, что мы используем правильную версию.
$ which php /Users/phil/.phpbrew/php/php-5.6.0/bin/php
К сожалению, он все еще использует версию по умолчанию, и я хочу убедиться, что моя кодовая база работает на PHP 5.5.
$ phpbrew use 5.5.17 $ which php /Users/phil/.phpbrew/php/php-5.5.17/bin/php
Отлично, в настоящее время включена версия PHP 5.5.17, которая в данном примере является той, которую мы хотим.
Теперь мы можем создать среду.
virtphp create airpair-api
Вы увидите много выходных данных, и если все пройдет хорошо, вы должны увидеть следующее:
Your virtual php environment (airpair-api) has been created! You can activate your new environment using: ~$ source /Users/phil/.virtphp/envs/airpair-api/bin/activate
На данный момент новая среда готова к использованию, но не включена. Скопируйте команду, которую она вам дает, и запустите ее, или запустите более короткую версию:
$ source ~/.virtphp/envs/airpair-api/bin/activate
Теперь вы должны увидеть имя среды (airpair-api)
в (airpair-api)
строке консоли перед символом $
. Это позволяет вам знать, что вы находитесь в окружении, поэтому вы можете деактивировать его или действовать соответственно.
Игра в песочнице
Теперь у нас есть эта среда, мы можем устанавливать и настраивать вещи, не влияя на другие установки PHP.
Одним из отличных вариантов использования сред является возможность установки расширений PECL. Вы можете не только протестировать работу приложения с расширением или без него, но также попробовать разные версии.
(airpair-api) $ pecl install xdebug (airpair-api) $ pecl install memcached-1.0.2
Это помогает нам установить отличный инструмент отладки Xdebug и установить расширение [memcached].
На момент написания команды PECL устанавливает пакеты через систему на основе PEAR. В будущих версиях virtPHP расширения PECL будут устанавливаться с помощью новой улучшенной системы Pickle . Это удалит несколько проблем, которые OS X, кажется, имеет с поддержкой PEAR.
Выход из окружающей среды
Чтобы проверить, используете ли вы среду, вам помогут две вещи. Первый ключ — увидеть имя среды в скобках в командной строке. Второй — использовать which php
и посмотреть, указывает ли он на среду virtPHP.
(airpair-api) $ which php /Users/phil/.virtphp/envs/airpair-api/bin/php (airpair-api) $ deactivate $ which php /Users/phil/.phpbrew/php/php-5.6.0/bin/php
Там вы можете видеть, что мы использовали airpair-api
. Затем после его деактивации консоль вернулась к использованию 5.6.0, установленной из PHPbrew, так как это по умолчанию.
Вывод
Игра со многими установленными версиями может показаться немного запутанной. На самом деле, здесь гораздо меньше, чем пытаться научить начинающего разработчика всему стеку.
Если новый разработчик попытался создать базовое приложение PHP, для начала они бы прошли следующие шаги:
- Apache / Nginx
- MySQL
- Виртуальные хосты и / etc / hosts
- Взломать ядро ОС версии PHP
- Может быть, вместо этого установите XAMPP / WAMP / MAMP
- Попробуйте обновить основные версии или * AMP версии
- Запутайтесь, что система PHP и MAMP PHP отличаются
- Попробуйте установить расширения PECL для версии MAMP, но вместо этого установите их на системный PHP
Вы можете избежать такой боли с помощью такого инструмента, как Vagrant и сценарий обеспечения, но это предполагает, что этот новичок находится в команде. Если идти в одиночку, начинающему будет гораздо сложнее начать.
Вот как сообщество Ruby on Rails делало вещи годами. Научите начинающих работать с фреймворком, абстрагироваться от многих сложных вещей, заставить их строить и позволить им больше узнавать обо всем по мере роста.
Возьмите свою версию PHP, установите то, что вам нужно, запустите сервер разработки PHP с помощью php -S
и увеличивайте свой стек только тогда, когда (или если) вам это нужно.
Четность Dev / Prod важна, но иногда вы можете избавиться от лишней заботы, если это просто маленький HTTP-сервис. Если у вас уже есть тестирование CI, это еще более верно.
Наконец, даже если вы не хотите запускать код через сервер разработки, PHPbrew и virtPHP по-прежнему полезны. Вы можете установить новые версии, как только они выйдут, чтобы поиграть с новым синтаксисом, и не сломать все ваши приложения.