Несколько версий PHP и обновление PHP в ISP Manager

Довольно частая задача стоит при использовании ISP Manager — это обновление версии PHP до более актуальной или параллельное использование нескольких версий PHP в режиме FastCGI/CGI для разных пользователей или да же сайтов. Подобная инструкция подойдет не только при использовании ISP Manager, но и без него, при ручной настройке WEB-сервера.

В последних версиях ISP Manager 5 научился менять версию PHP из панели управления. Но если вы желаете свою особенную версию со своим набором модулей, то этот способ подходит.

Обновление версии PHP в Centos.

Обновление PHP или установка будут производиться из репозитория Remi, поэтому произведем его подключение.

Centos 5

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

Centos 6

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Centos 7

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

После установки пакета нужной версии репозитория, у Вас появится соответствующий файл: /etc/yum.repos.d/remi.repo

Теперь необходимо включить нужную версию PHP. Для этого редактируем /etc/yum.repos.d/remi.repo. Сейчас он содержит:

[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
 
[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php55/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
 
[remi-php56]
name=Les RPM de remi de PHP 5.6 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php56/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php56/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php55/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php56]
name=Les RPM de remi de PHP 5.6 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php56/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php56/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

На примере Centos 6, где по умолчанию предоставляется версия PHP 5.3, для обновления до 5.4 достаточно установить enabled=1 в главной секции [remi].

[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

После чего выполняем команду:

yum install php -y
yum install php -y

и наслаждаемся новой версией PHP. Для работы с apache mod_php этот способ так же работает.
Если нужно обновить версиюю до 5.5, то включаем ветку remi-php55 и снова одновляем php. Для версии 5.6 аналогично.

Из данного репозитория можно обновить так же mysql, phpmyadmin и т.д.
При обновлении phpmyadmin, у Вас могут возникнуть проблемы в его работе, из за того, что с новым пакетом обновляется файл /etc/httpd/conf.d/phpmyadmin.conf, где указывается не полный параметр php_admin_value open_basedir
Поэтому редактируем его к виду

php_admin_value open_basedir "/usr/share/phpMyAdmin/:/etc/phpMyAdmin/:/var/lib/phpMyAdmin/:/tmp/:/usr/share/php/:/var/lib/php/session/:/usr/share/doc/"
php_admin_value open_basedir "/usr/share/phpMyAdmin/:/etc/phpMyAdmin/:/var/lib/phpMyAdmin/:/tmp/:/usr/share/php/:/var/lib/php/session/:/usr/share/doc/"

Добавляя запись /usr/share/doc/

Обновление версии PHP в Ubuntu

В Ubuntu процесс аналогичен. Для простоты обновления используем репозиторий от Ondrej
Конечно же, можно собрать новую версию из исходников, но зачем усложнять жизнь.

Для версии 5.4 добавляем репозиторий:

add-apt-repository ppa:ondrej/php5-oldstabl
add-apt-repository ppa:ondrej/php5-oldstabl

Для версии 5.5:

add-apt-repository ppa:ondrej/php5
add-apt-repository ppa:ondrej/php5

Для версии 5.6:

add-apt-repository ppa:ondrej/php5-5.6
add-apt-repository ppa:ondrej/php5-5.6

После добавления репозитория, обновляем PHP:

apt-get install php5
apt-get install php5

Если у Вас отсутствует add-apt-repository. Устанавливаем пакет:

apt-get install software-properties-common
apt-get install software-properties-common

Установка нескольких версий PHP в Centos

    Способ подходит для Centos с архитектурой x86_64. Для i386 архикетуры в репозитории remi, нет пакетов для установки нескольких версий и необходимо собирать PHP отдельно из исходников.

Подключаем репозиторий Remi как описано выше и включаем нужную вертку.
Теперь, чтобы установить новую версию PHP паралельно уже используемой, необходимо использовать имена пакетов с номером версии. Т.е. в репозитории лежат пакеты с именами php55, php56. К примеру, чтобы установить 5.6 выполняем:

yum install php56-php php56-php-cli php56-php-common php56-php-gd php56-php-ioncube-loader php56-php-mbstring php56-php-mcrypt php56-php-mysqlnd php56-php-opcache php56-php-pear
yum install php56-php php56-php-cli php56-php-common php56-php-gd php56-php-ioncube-loader php56-php-mbstring php56-php-mcrypt php56-php-mysqlnd php56-php-opcache php56-php-pear

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

Установка нескольких версий PHP в Ubuntu

Здесь дела обстоят хуже. Нужную версию PHP придется собирать из исходников. Но для упрощения этого процесса, можно воспользоваться специальными менеджерами версий PHP: PHPBREW, PHPENV. Лично мне понравился PHРBREW и использую собраную им версию PHP для некоторых проектов. Использование PHPBREW оставим на самостоятельное изучение. Приведу лишь пример установки:

1. Устанавливаем PHPBREW:

wget https://github.com/phpbrew/phpbrew/raw/master/phpbrew
chmod +x phpbrew
mv phpbrew /usr/bin/phpbrew
wget https://github.com/phpbrew/phpbrew/raw/master/phpbrew
chmod +x phpbrew
mv phpbrew /usr/bin/phpbrew

2. Инициализируем начальные настройки:

phpbrew init
phpbrew init

3. Устанавливаем директорию куда будет собираться PHP:

vi ~/.phpbrew/bashrc
vi ~/.phpbrew/bashrc
export PHPBREW_ROOT="/opt/phpbrew"
export PHPBREW_ROOT="/opt/phpbrew"
source ~/.phpbrew/bashrc
source ~/.phpbrew/bashrc

4. Устанавливаем пакеты зависимостей при сборке:

apt-get install gcc make libxml2-dev libssl-dev libbz2-dev libmcrypt-dev libreadline-dev libxslt1-dev autoconf libcurl4-gnutls-dev libicu-dev g++ php5-dev
apt-get install gcc make libxml2-dev libssl-dev libbz2-dev libmcrypt-dev libreadline-dev libxslt1-dev autoconf libcurl4-gnutls-dev libicu-dev g++ php5-dev

5. Основные команды PHPBREW и установка PHP:
— обновление списка возможных для установки версий

phpbrew known --update
phpbrew known --update

— вывод списка возможных версий

phpbrew known
phpbrew known

— установка PHP с некоторым набором модулей:

phpbrew install 5.3.29 +default +mysql +gd +curl +iconv
phpbrew install 5.3.29 +default +mysql +gd +curl +iconv

— просмотр возможный наборов модулей

phpbrew variants
phpbrew variants

Использование нескольких версий PHP

Теперь о самом главном: как же использвать установленные нами версии в ISP Manager.
Обязательным условием является использование, для созданого домена, FastCGI или просто CGI режима работы PHP.
В ISP есть несколько путей подключения нужной версии:

1) Замена php обработчика для вех сайтов пользователя ISP Manager.

Для каждого из пользователей ISP Manager, создается свой собственны обработчик. Следовательно, на примере пользователя admin, мы редактируем:

vim /var/www/admin/data/php-bin/php
vim /var/www/admin/data/php-bin/php

меняем сожержимое

#!/usr/bin/php-cgi
#!/usr/bin/php-cgi

указывая новую версию обработчика PHP

#!/usr/bin/php56-cgi
#!/usr/bin/php56-cgi

при использовании PHPBREW, путь будет примерно следующий:

#!/opt/phpbrew/php/php-5.3.29/bin/php-cgi
#!/opt/phpbrew/php/php-5.3.29/bin/php-cgi

2) Замена php только для определенного домена.

Создаем копию оригинального файла /var/www/admin/data/php-bin/php и меняем в нем используемый обработчик:

cp /var/www/admin/data/php-bin/php /var/www/admin/data/php-bin/php56
chmod +w /var/www/admin/data/php-bin/php56
vim /var/www/admin/data/php-bin/php56
cp /var/www/admin/data/php-bin/php /var/www/admin/data/php-bin/php56
chmod +w /var/www/admin/data/php-bin/php56
vim /var/www/admin/data/php-bin/php56
#!/usr/bin/php56-cgi
#!/usr/bin/php56-cgi
chmod -w /var/www/admin/data/php-bin/php56
chmod -w /var/www/admin/data/php-bin/php56

Теперь остается в файле нужного домена, к примеру /etc/httpd/conf/vhosts/admin/example.com, указать нужный обработчик.

При использовании FastCGI изменяем:

FCGIWrapper /var/www/admin/data/php-bin/php
FCGIWrapper /var/www/admin/data/php-bin/php

на

FCGIWrapper /var/www/admin/data/php-bin/php56
FCGIWrapper /var/www/admin/data/php-bin/php56

При использовании CGI, меняем:

Action application/x-httpd-php5 /php-bin/php
Action application/x-httpd-php5 /php-bin/php

на

Action application/x-httpd-php5 /php-bin/php56
Action application/x-httpd-php5 /php-bin/php56

Единственный недостаток этого метода — при обновлении данных домена из панели ISP Manager, записи меняются на оригинальные.

VN:F [1.9.22_1171]
Рейтинг: 9.5/10 (4 голоса(ов))
Несколько версий PHP и обновление PHP в ISP Manager, 9.5 out of 10 based on 4 ratings

24 Ответы

  1. Спасибо, все четко, быстро и понятно. Обновил PHP на нужную версию без проблем!

    • Это измененная(патченая) версия панели 4 версии ISP, которая уже не поддерживается давно. В 5 версии ISP добавили возможность из коробки использовать несколько версий PHP, но они устанавливаются из репозитория ISP и очень урезан список модулей.

  2. в centos 6 мне не удалось поставить несколько версий php одновременно
    ругается что пакетов таких нет с именами php56-php php56-php-cli php56-php-common
    и т.д.

    • remi установлен? Обязательно проверьте, что в файле /etc/yum.repos.d/remi.repo в группе [remi] параметр enabled=1 и в категории [remi-php56] параметр enabled=1

      • все установлено, все remi и прочее, 100 раз проверил все параметры, все равно шлет лесом меня, говорит нет таких пакетов, пришлось просто обновить с 5,3 до 5,6 php
        других вариантов не было.
        а вот обновил без проблем до 5,6 значит все правильно подключено !!!, а конкретно таких пакетов не видел в упор php56 и т.д
        может их снесли с репозитория этого ???

        • Вот только что проверил:

          # yum info php56-php-common
          Загружены модули: fastestmirror, security
          Loading mirror speeds from cached hostfile
           * epel: fedora-mirror01.rbc.ru
           * remi: mirror.h1host.ru
           * remi-php56: mirror.h1host.ru
           * remi-safe: mirror.h1host.ru
          Доступные пакеты
          Название: php56-php-common
          Архитектура: x86_64
          Версия: 5.6.19
          Выпуск: 1.el6.remi
          Объем: 685 k
          Источник: remi
          Аннотация: Common files for PHP
          Ссылка: http://www.php.net/
          Лицензия: PHP and BSD and ASL 1.0
          Описание: The php56-php-common package contains files used by both
                  : the php56-php package and the php56-php-cli package.
          # yum info php56-php-common
          Загружены модули: fastestmirror, security
          Loading mirror speeds from cached hostfile
           * epel: fedora-mirror01.rbc.ru
           * remi: mirror.h1host.ru
           * remi-php56: mirror.h1host.ru
           * remi-safe: mirror.h1host.ru
          Доступные пакеты
          Название: php56-php-common
          Архитектура: x86_64
          Версия: 5.6.19
          Выпуск: 1.el6.remi
          Объем: 685 k
          Источник: remi
          Аннотация: Common files for PHP
          Ссылка: http://www.php.net/
          Лицензия: PHP and BSD and ASL 1.0
          Описание: The php56-php-common package contains files used by both
                  : the php56-php package and the php56-php-cli package.
      • нечайно ответил сам себе
        как видите все репы подключены и рапортуют об отсутствии таких пакетов, вот подтверждение:
        yum search php56-php-common
        Loaded plugins: fastestmirror
        Loading mirror speeds from cached hostfile
        * base: mirror.h1host.ru
        * epel: mirror.yandex.ru
        * extras: mirror.h1host.ru
        * remi: mirror.h1host.ru
        * remi-php56: mirror.h1host.ru
        * remi-safe: mirror.h1host.ru
        * rpmforge: http://ftp.colocall.net
        * updates: mirror.h1host.ru
        * webtatic: uk.repo.webtatic.com
        Warning: No matches found for: php56-php-common
        No Matches found

        • Если все верно, то в выводе «yum repolist enabled» должен быть репозиторий remi-php56:

          # yum repolist enabled
          Загружены модули: fastestmirror, security
          Loading mirror speeds from cached hostfile
           * epel: fedora-mirror01.rbc.ru
           * remi: mirror.h1host.ru
           * remi-php56: mirror.h1host.ru
           * remi-safe: mirror.h1host.ru
          Идентификатор репозитория                               репозиторий                                                                                  состояние
          base                                                    CentOS- base                                                                                  6 518
          *epel                                                   Extra Packages for Enterprise Linux 6 - x86_64                                               12 078
          extras                                                  CentOS- extras                                                                                   38
          openstack-selectel                                      openstack-selectel                                                                               39
          remi                                                    Remi's RPM repository for Enterprise Linux 6 - x86_64                                         3 190
          remi-php56                                              Remi's PHP 5.6 RPM repository for Enterprise Linux 6 - x86_64                                   391
          remi-safe                                               Safe Remi's RPM repository for Enterprise Linux 6 - x86_64                                      573
          updates                                                 CentOS- updates                                                                               1 370
          repolist: 24 197
          # yum repolist enabled
          Загружены модули: fastestmirror, security
          Loading mirror speeds from cached hostfile
           * epel: fedora-mirror01.rbc.ru
           * remi: mirror.h1host.ru
           * remi-php56: mirror.h1host.ru
           * remi-safe: mirror.h1host.ru
          Идентификатор репозитория                               репозиторий                                                                                  состояние
          base                                                    CentOS- base                                                                                  6 518
          *epel                                                   Extra Packages for Enterprise Linux 6 - x86_64                                               12 078
          extras                                                  CentOS- extras                                                                                   38
          openstack-selectel                                      openstack-selectel                                                                               39
          remi                                                    Remi's RPM repository for Enterprise Linux 6 - x86_64                                         3 190
          remi-php56                                              Remi's PHP 5.6 RPM repository for Enterprise Linux 6 - x86_64                                   391
          remi-safe                                               Safe Remi's RPM repository for Enterprise Linux 6 - x86_64                                      573
          updates                                                 CentOS- updates                                                                               1 370
          repolist: 24 197
          • ну я ж только что показал, что есть эти репы подключены и поиск по ним шерстит 100%,
            remi Remi’s RPM repository for Enterprise Linux 6 — i386 1625+376
            remi-php56 Remi’s PHP 5.6 RPM repository for Enterprise Linux 6 — i386 387+2
            но пакетов таких там не находит сделайте команду если есть centos
            #yum search php56-php-common
            сами увидите
            Warning: No matches found for: php56-php-common
            No Matches found

        • Но, для i368 архитектуры, php 5.6 версия идет в обычных пакетах, так что php56-common не нужен:

          # yum info  php-common
          Загружены модули: fastestmirror, security
          Loading mirror speeds from cached hostfile
           * epel: mirror.awanti.com
           * remi: mirror.h1host.ru
           * remi-php56: mirror.h1host.ru
           * remi-safe: mirror.h1host.ru
          Доступные пакеты
          Название: php-common
          Архитектура: i686
          Версия: 5.6.19
          Выпуск: 1.el6.remi
          Объем: 1.1 M
          Источник: remi-php56
          Аннотация: Common files for PHP
          Ссылка: http://www.php.net/
          Лицензия: PHP and BSD and ASL 1.0
          Описание: The php-common package contains files used by both the php
                  : package and the php-cli package.
          # yum info  php-common
          Загружены модули: fastestmirror, security
          Loading mirror speeds from cached hostfile
           * epel: mirror.awanti.com
           * remi: mirror.h1host.ru
           * remi-php56: mirror.h1host.ru
           * remi-safe: mirror.h1host.ru
          Доступные пакеты
          Название: php-common
          Архитектура: i686
          Версия: 5.6.19
          Выпуск: 1.el6.remi
          Объем: 1.1 M
          Источник: remi-php56
          Аннотация: Common files for PHP
          Ссылка: http://www.php.net/
          Лицензия: PHP and BSD and ASL 1.0
          Описание: The php-common package contains files used by both the php
                  : package and the php-cli package.
          • так он у меня ни cli ни gd никакие пакеты не находит и что это означает?

        • Для i386, в репозиториях нет пакетов с названием php56-xxx, но обновляются обычные пакеты до версии 5.6:

          # yum info php-gd | grep Версия
          Версия: 5.6.19
           
          # yum info php-cli | grep Версия
          Версия: 5.6.19
          # yum info php-gd | grep Версия
          Версия: 5.6.19
          
          # yum info php-cli | grep Версия
          Версия: 5.6.19
          • ну получается что я не могу поставить несколько разных php таким простым способом?

  3. спасибо большое за подсказку, но тогда наверное надо указать в статье, что пакеты так встанут только при архитектуре x86_64

  4. Спасибо друг! Убил много времени на то что бы понять как сменить версию пыха, и тут твой пост! Все ясно и понятно объяснил!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *