Ubuntu 14.04 две версии PHP на Apache2 (используя PhpBrew)

При разработке сайтов, часто нужно дорабатывать чужие проекты со старыми движками. Ведь на данный момент многие шаред хостинги не стремятся переходить на свежие версии PHP. Например на момент написания это заметки доступна версия PHP 5.6.6, но на сервере заказчика до сих пор можно выбирать только из PHP 5.2 и PHP 5.3. Значит для корректной доработки сайта локально, нужно иметь ту же версию что и на хостинге... сделаем это.

В то же время, не хочется сносить свежую версию PHP, необходимую для свежих движков. В этом поможет phpbrew. И все бы хорошо, стаей по его установке хватает, но чтобы запустить сайт и phpmyadmin с использованием phpbrew мне все же пришлось посидеть часок чтобы разобраться в некоторых аспектах. Поэтому пишу свою версию, которая завелась на Ubuntu 14.04 + phpbrew = много версия PHP на apache2.

Установка phpbre на Ubuntu 14.04

Установим зависимости

sudo apt-get build-dep php5
sudo apt-get install -y php5 php5-dev php-pear autoconf automake curl build-essential libxslt1-dev re2c libxml2 libxml2-dev php5-cli bison libbz2-dev libreadline-dev libmcrypt-dev libmcrypt4

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

Устанавливаем сам phpbrew

cd /tmp/
curl -O https://raw.github.com/c9s/phpbrew/master/phpbrew
chmod +x phpbrew
sudo cp phpbrew /usr/bin/phpbrew
phpbrew init

Добавляем в с файл ~/.bashrc строку
source ~/.phpbrew/bashrc
И открываем новое окно консоли, чтобы изменения вступили в силу.

Установка разных версия PHP на Ubuntu Apache

Устанавливаем PHP 5.3.28 на Ubuntu 14.04 с помощью команды
phpbrew install 5.3.28 +defa

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

sudo chmod a+w /usr/lib/apache2/modules/
sudo chmod a+w /etc/apache2/mods-available/

Теперь можно собрать сразу с опцией записи в Apache

phpbrew install 5.3.28 +default +dbs +apxs2

Переключаемся на вторую версию PHP

phpbrew use php-5.3.29
sudo service apache2 restart

Снова включим защиту файлов

chmod a-w /usr/lib/apache2/modules/
chmod a-w /etc/apache2/mods-available/
chown root:root /usr/lib/apache2/modules/libphp5.*

Установка расширений PEAR легко делать с помощью команды:

phpbrew etx install xdebug

вместо xdebug можете писать нужное расширение.

На будущее переключать какую версия PHP грузить можно через файл Apache /etc/apache2/mods-available/php5.load строка:
LoadModule php5_module /usr/lib/apache2/modules/libphp5.3.28.so

Решение проблем

И теперь, кажется что все ок. phpinfo() показывает, что мы работаем с версией PHP 5.3 на Ubuntu 14.04. Но phpmyadmin у меня не запустился. Пришлось редактировать конфиги php.ini.

мождете найти нужный php.ini файл в своей домашней директории ~/.phpbrew/php/php-5.3.29/etc/. Либо редактировать через командную строку набрав:

phpbrew config

Нам нужно указать путь к mysql.sock файлу, т.к. если ваши скрипты будут пытаться подключиться к базе по адресу localhost, зачастую будет нужен именно сокет. Путаницу вводит возможность работать с mysql по адресу 127.0.0.1, что вроде как синоним localhost. Но при обращении по IP будет всегда использоваться TCP соединение с базой, поэтому ошибки не возникнет.

MySQL ошибка: 1 - нет файла

Указываем адрес сокета в трех местах

pdo_mysql.default_socket=/run/mysqld/mysqld.sock
mysql.default_socket =/run/mysqld/mysqld.sock
mysqli.default_socket =/run/mysqld/mysqld.sock

Не прописана директория временных файлов

В том же php.ini раскомментировать строку
session.save_path = "/tmp"