Установка и настройка PHPBrew

PHPBrew - позволяет собрать и установить несколько различных версий PHP.

Установка зависимостей

В терминале выполняем команды:

sudo apt-get update
sudo apt-get build-dep php5
sudo apt-get install php5 php5-dev php-pear autoconf automake curl libcurl3-openssl-dev build-essential libxslt1-dev re2c libxml2 libxml2-dev php5-cli bison libbz2-dev libreadline-dev
sudo apt-get install libfreetype6 libfreetype6-dev libpng12-0 libpng12-dev libjpeg-dev libjpeg8-dev libjpeg8  libgd-dev libgd3 libxpm4 libltdl7 libltdl-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install gettext libgettextpo-dev libgettextpo0
sudo apt-get install libicu-dev
sudo apt-get install libmhash-dev libmhash2
sudo apt-get install libmcrypt-dev libmcrypt4
sudo apt-get install mysql-server mysql-client libmysqlclient-dev libmysqld-dev

Установка PHPBrew в system-wide environment

Для начала логинимся как root:

sudo -i

Выполняем команды:

curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
chmod +x phpbrew
mv phpbrew /usr/local/bin/phpbrew

Инициализируем PHPBrew:

phpbrew init

Редактируем ~/.phpbrew/init:

nano ~/.phpbrew/init

Вставляем следующие строки:

# Export PHPBrew paths.
export PHPBREW_ROOT=/opt/phpbrew
export PHPBREW_HOME=/root/.phpbrew

Выполняем команду:

. ~/.phpbrew/bashrc

Устанавливаем system-wide PHP(s):

phpbrew install 5.5 +default +mysql +pdo +apxs2 +icu +intl -- --with-mysql-sock=/var/run/mysqld/mysqld.sock
phpbrew install 5.6 +default +mysql +pdo +apxs2 +icu +intl -- --with-mysql-sock=/var/run/mysqld/mysqld.sock
phpbrew install 7.0 +default +mysql +pdo +apxs2 +icu +intl -- --with-mysql-sock=/var/run/mysqld/mysqld.sock

Копируем ~/.phpbrew/bashrc в /opt/phpbrew/bashrc:

cp ~/.phpbrew/bashrc /opt/phpbrew/bashrc

Редактируем /etc/bash.bashrc:

nano /etc/bash.bashrc

Вставляем следующие строки:

# Export PHPBrew paths.
export PHPBREW_ROOT=/opt/phpbrew
export PHPBREW_HOME=$HOME/.phpbrew

# PHPBrew difinitions.
if [ -f /opt/phpbrew/bashrc ]; then
  . /opt/phpbrew/bashrc
fi

В терминале выполняем команду:

. ~/.bashrc

Устанавливаем расширения для всех утснановленных PHP(s):

phpbrew each 'ext install gettext'
phpbrew each 'ext install ftp'
phpbrew each 'ext install gd -- --with-libdir=lib/i386-linux-gnu --with-gd=shared --enable-gd-native-ttf --with-freetype-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr'

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

Переключаем PHP версию:

phpbrew switch 5.6.21

Следующий шаг необязательный. Но если вы следовали всему, что написано и устанавливали php5 и php7, тогда необходимо отредактировать /etc/apache2/mods-available/php7.load:

nano /etc/apache2/mods-available/php7.load

И законментировать подключение php7:

#LoadModule php7_module        /usr/lib/apache2/modules/libphp7.0.6.so

Рестартуем apache2:

apachectl restart

Проверка установки PHP

Лучший способ проверить, что PHP установлен и работает - использовать phpinfo().

Выходим из под root. Удаляем ~/websites/index.html:

rm ~/websites/index.html

Далее создаем файл ~/websites/index.php:

echo "<?php phpinfo();" > ~/websites/index.php

Открываем в браузере http://localhost и мы должны увидеть информационную страницу об PHP.

PHP Switcher Script

Для быстрого переключения php и рестарта Apache я написал скрипт.

Создаем директорию ~/bin/:

mkdir -p ~/bin/

Редактируем ~/bin/sphp:

nano ~/bin/sphp

Вставляем код скрипта:

#!/bin/bash

if [ $# -ne 1 ]; then
  echo "Usage: sphp [php version]"
else
  new_version_installed=false

  old_version="`php -r \"echo phpversion();\"`"
  new_version="$1"

  short_old_version="`php -r \"echo substr('$old_version', 0, 1);\"`"
  short_new_version="`php -r \"echo substr('$new_version', 0, 1);\"`"

  module=/usr/lib/apache2/modules/libphp${new_version}.so

  for line in `phpbrew list`; do
    if [ $line == "php-${new_version}" ]; then
      new_version_installed=true
      break
    fi
  done

  if [ $new_version_installed != true ]; then
    echo "PHP version ${new_version} is not installed by PHPBrew."
  elif [ ! -f  $module ]; then
     echo "PHP version ${new_version} is not configured for apache."
  else
     . ~/.bashrc

     echo "PHP version ${new_version} found"

     echo "Switching PHP version..."
     phpbrew switch ${new_version}

     echo "Fixing LoadModule..."
     old_mod=/etc/apache2/mods-available/php${short_old_version}.load
     new_mod=/etc/apache2/mods-available/php${short_new_version}.load

     if [ -f $old_mod ]; then
       echo "" | sudo tee $old_mod > /dev/null
     fi

     if [ -f $new_mod ]; then
       content="LoadModule php${short_new_version}_module ${module}"
       echo $content | sudo tee $new_mod > /dev/null
     fi

     echo "Restarting system Apache..."
     sudo apachectl restart

     echo "Done."
  fi
fi

Делаем скрипт исполняемым:

chmod +x ~/bin/sphp

Редактируем ~/.bash_aliases:

nano ~/.bash_aliases

Вставляем строку в конец файла:

alias sphp='. sphp'

Перезагружаемся. Проверяем, что PATH обновился:

echo $PATH

У меня результатом этой команды оказался такой вывод:

/opt/phpbrew/php/php-5.6.21/bin:/home/benya/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Об успешном обновлении говорит наличие подстроки /home/benya/bin.

Тест переключения PHP

После того, как все эти шаги выполнены, можно переключить версию PHP с помощью команды:

sphp 7.0.6

Открываем в браузере http://localhost и проверяем, что Apache теперь работает с PHP 7.0.6. Переключим версию PHP обратно на 5.6.21:

sphp 5.6.21

Открываем в браузере http://localhost и проверяем, что Apache теперь работает с PHP 5.6.21.

Не забываем, что для установки новых версий PHP или расширений с помощью PHPBrew необходимо залогинится под root.

Часто используемые команды PHPBrew

Список известных версий:

phpbrew known

Список вариантов:

phpbrew variants

Установка PHP с вариантом default:

phpbrew install 5.6 +default

Список установленных PHP версий:

phpbrew list

Настройка активной версии PHP:

phpbrew config

Временно переключиться на системный PHP (модуль Apache нужно переподключать вручную):

phpbrew off

Пермаментно переключиться на системный PHP (модуль Apache нужно переподключать вручную):

phpbrew switch-off

Удалить установленную сборку PHP (если PHP устанавливался с вариантом +apxs2, то модуль необходимо удалить вручную):

phpbrew remove php-5.6.21

Удалить установленную PHP версию и файлы настроек (если PHP устанавливался с вариантом +apxs2, то модуль необходимо удалить вручную):

phpbrew purge php-5.6.21

Расширения PHP(s)

Список локальных расширений:

phpbrew ext

Установка расширения для активной версии PHP:

phpbrew ext install xdebug

Отключение расширения для активной версии PHP:

phpbrew ext disable xdebug

Включение расширения для активной версии PHP:

phpbrew ext enable xdebug

Настройка расширения для активной версии PHP:

phpbrew ext config xdebug

Установленные PHP(s)

Установленные PHP(s) располагаются в /opt/phpbrew/php, например, php 5.6.21 находится в:

/opt/phpbrew/php/5.6.21/bin/php

Файл настроек php.ini находится в:

/opt/phpbrew/php/5.6.21/etc/php.ini

Настройки расширений лежат в:

/opt/phpbrew/php/5.6.21/var/db
/opt/phpbrew/php/5.6.21/var/db/xdebug.ini
/opt/phpbrew/php/5.6.21/var/db/apc.ini
/opt/phpbrew/php/5.6.21/var/db/memcache.ini

Команды для быстрого переключения между директориями

Переключиться в PHP var директорию:

phpbrew cd var

Переключиться в PHP etc директорию:

phpbrew cd etc

Переключиться в PHP build директорию:

phpbrew cd build

Переключиться в PHP dist директорию:

phpbrew cd dist

Официальный источник https://github.com/phpbrew/phpbrew

Комментарии (5)

Аватар пользователя Dmitry
Dmitry

Здравствуйте на шаге установка зависимостей после введения команды: "sudo apt-get build-dep php5"
получаю сообщение: "E: Вы должны заполнить sources.list, поместив туда URI источников пакетов", сначала я не предал этому значения но потом после следующей команды: "sudo apt-get install php5 php5-dev php-pear autoconf automake curl libcurl3-openssl-dev build-essential libxslt1-dev re2c libxml2 libxml2-dev php5-cli bison libbz2-dev libreadline-dev", он вывалил кучу: 

Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Заметьте, вместо «libcurl3-openssl-dev» выбирается «libcurl4-openssl-dev»
Пакет php5 недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list

Пакет php5-cli недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
Однако следующие пакеты могут его заменить:
  php7.0-cli:i386 php7.0-cli

Пакет php5-dev недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list

E: Для пакета «php5» не найден кандидат на установку
E: Для пакета «php5-dev» не найден кандидат на установку
E: Для пакета «php5-cli» не найден кандидат на установку

Собственно после этого я понял что дело пошло не по плану, не подскажите в чём может быть проблема?

Аватар пользователя Benya
Benya

У вас случаем не Ubuntu 16.04?

Аватар пользователя Benya
Benya

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

Аватар пользователя Дмитрий
Дмитрий

На этапк phpbrew install вываливает кучу ошибок, в итоге не находит OpenSSL и все. Ничего не устанавливается. Как бы это починить можно было бы?