Как сменить версию PHP на сервере

Внимание! Если на сервере установлена панель ISPmanager 5, то меняйте версию PHP только с помощью модуля панели "Программное обеспечение".
Если Вы установите или настроите ПО вручную, нет гарантий, что панель сможет работать корректно в дальнейшем с данным ПО.

Новая статья для перехода на PHP7.4 и/или PHP8.1 по ссылке

Debian

В файл /etc/apt/sources.list добавляем строки

deb http://ftp.debian.org/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free

для подключения старого репозитория.

Создаем файл /etc/apt/preferences.d/php53 со следующим содержимым:

Package: php5*
Pin: release a=oldoldstable
Pin-Priority: 700

Package: libapache2-mod-php5
Pin: release a=oldoldstable
Pin-Priority: 700

Package: php-pear
Pin: release a=oldoldstable
Pin-Priority: 700

Package: php-apc
Pin: release a=oldoldstable
Pin-Priority: 700

Package: *
Pin: release a=oldstable
Pin-Priority: 600

Устанавливать нужно вручную из консоли: Запускаем обновление списка пакетов apt-get update и переустановку с заменой установленного php54 на требуемыйphp53 с теми же расширениями:

apt-get install --reinstall `dpkg -l|grep php|grep 5.4|awk '{print $2}'`

Ubuntu 12.04

PHP 5.3.x >> PHP 5.5.x

Для начала установим python-software-properties
Это программное обеспечение предоставляет средства для управления используемыми APT-репозиториями. Оно управляет как дистрибутивом, так и независимыми репозиториями программ.

apt-get install make python-software-properties

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

add-apt-repository ppa:ondrej/php5

Если выдаёт ошибку

pycurl.error: (6, "Couldn't resolve host 'launchpad.net'")

Добавляем гугловский резолвер в свой /etc/resolv.conf:

echo "nameserver 8.8.8.8" >> /etc/resolv.conf

И повторяем добавление репозитория.

Обновляем дистрибутив

apt-get update

Устанавливаем PHP последней версии(5.5.x)

apt-get install php5 libapache2-mod-php5

Проверяем версию:

php -v
PHP 5.5.7-1+sury.org~precise+1 (cli) (built: Dec 12 2013 21:37:40) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
   with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies
   with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

Далее нужно будет установить необходимые расширения для PHP 5.5

apt-get install php5-расширение

Расширения, установленные вручную, нужно будет удалить и установить снова. Например, через pecl:

pecl uninstall расширение
pecl install расширение

so для PHP 5.5.x лежат в директории /usr/lib/php5/20121212/ - возможно понадобится изменить пути для расширений (например, для zend_extension)

Oбновляем кэш установленного ПО панели ISPmanager:

  • ISPmanager 4:
/usr/local/ispmgr/sbin/pkgctl cache
  • ISPmanager 5:
/usr/local/mgr5/sbin/pkgctl recache noupdate

Перезапускаем панель:

  • ISPmanager 4:
killall ispmgr
  • ISPmanager 5 (не обязательно):
killall core

CentOS

PHP 5.3 >> PHP 5.4

Для обновления PHP ветки 5.3.x до 5.4.x в дистрибутиве CentOS 6.4 и 6.5 потребуется подключить сторонний репозитарий atomic и после этого запустить команду обновления.

wget -q -O - http://www.atomicorp.com/installers/atomic | sh

На CentOS 6.5 при запросе один раз нажать Enter.

STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

====================================================================
THIS SOFTWARE IS UNSUPPORTED.  IF YOU REQUIRE SUPPORTED SOFWARE
PLEASE SEE THE URL BELOW TO PURCHASE A NUCLEUS LICENSE AND DO NOT
PROCEED WITH INSTALLING THIS PACKAGE.
====================================================================

For supported software packages please purchase a Nucleus license:
https://www.atomicorp.com/products/nucleus.html
All atomic repository rpms are UNSUPPORTED.
Do you agree to these terms? (yes/no) [Default: yes] yes

Configuring the [atomic] yum archive for this system

Installing the Atomic GPG key: OK
Downloading atomic-release-1.0-16.el6.art.noarch.rpm: OK



The Atomic Rocket Turtle archive has now been installed and configured for your system
The following channels are available:
  atomic          - [ACTIVATED] - contains the stable tree of ART packages
  atomic-testing  - [DISABLED]  - contains the testing tree of ART packages
  atomic-bleeding - [DISABLED]  - contains the development tree of ART packages

после чего выполнить команду

yum update php

На CentOS 6.5 нужно будет после этого 2 раза ввести "y":

...
Total download size: 7.5 M
Is this ok [y/N]: y
...
предупреждение: rpmts_HdrFromFdno: Заголовок V3 DSA/SHA1 Signature, key ID 5ebd2744: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY.art.txt
Importing GPG key 0x5EBD2744:
Userid : Atomic Rocket Turtle <This email address is being protected from spambots. You need JavaScript enabled to view it.;
Package: atomic-release-1.0-17.el6.art.noarch (installed)
From   : /etc/pki/rpm-gpg/RPM-GPG-KEY.art.txt
Is this ok [y/N]: y

Во время обновления может возникнуть ошибка корректности GPG подписи:

The GPG keys listed for the "CentOS / Red Hat Enterprise Linux 6 - atomicrocketturtle.com" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.

Чтобы продолжить обновление РНР можно проигнорировать ошибку подписи так:

yum -y --nogpgcheck update php


В зависимости от доступных ресурсов на сервере, обновление займет от нескольких минут до получаса. Далее потребуется перезапустить веб-сервер Apache:

service httpd restart

В случае использования ISPmanager так же следует обновить кэш

ISPmanager4: /usr/local/ispmgr/sbin/pkgctl cache ; killall ispmgr

ISPmanager5: Зайти в панель, в Features/ПО/Software и нажать кнопку "Обновить", галочку "Update available software" поставить, нажать "ОК".

FreeBSD

Описано как можно сменить любую версию PHP на любую.

Данная инструкция подразумевает, что на сервере установлена операционная система FreeBSD, используется панель управления сервером ISPmanager и объём оперативной памяти не менее 512Мб. Инструкцию необходимо выполнять в консоли (SSH) с правами пользователя root.


Прежде чем приступить к переустановке PHP, произведём на сервере обновление портов. Это действие не является обязательным условием, но уменьшает вероятность получения различных ошибок в процессе установки/переустановки программного обеспечения, плюс даёт возможность устанавливать на сервер самые свежие версии дистрибутивов. Данная процедура может занять довольно продолжительное время, придётся подождать.


Для обновления портов необходимо выполнить следующую команду:

root@server:/root # portsnap fetch update

После того как процесс обновления портов завершен, можно приступить к основной задаче - переустановке. Разделим её на три этапа: 1 - удаление текущей версии, 2 - установка необходимой версии, 3 - установка расширений для установленной необходимой версии.

1-й этап - удаление текущей версии

Сделаем резервную копию файла extensions.ini:

root@server:/root # cp /usr/local/etc/php/extensions.ini /usr/local/etc/php/extensions.ini_back

В этом файле перечислены расширения подключенные для текущей версии PHP. Если после переустановки вам потребуется установить тот же набор расширений, что был у прежней версии, то не придётся его вспоминать, а можно будет посмотреть в файле /usr/local/etc/php/extensions.ini_back


Теперь можно удалить текущую версию PHP.
Так как у нас на сервере используется панель управления сервером ISPmanager, то и удалять текущую версию мы будем через панель, иначе, по окончанию всех работ, ISPmanager по-прежнему будет показывать ту версию PHP которая была до переустановки ( даже если обновить кэш панели), а в разделе "Расширения PHP" для установки будут доступны расширения от уже несуществующей на сервере версии.


Заходим в ISPmanager под пользователем root, находим раздел "Настройки сервера" и выбираем там пункт "Возможности". В списке установленного ПО находим php текущей версии, выделяем и в верхней части панели нажимаем "Удалить". Ждём пока информация об установленной версии PHP не исчезнет из списка.


После того, как это произойдёт, проверим, что на сервере от этой версии ничего не сталось:

root@server:/root # ls /usr/local/etc/php/


Если кроме файла extensions.ini_back увидим ещё и файл extensions.ini, удаляем его:

root@server:/root # rm -f /usr/local/etc/php/extensions.ini


Далее проверяем что в директории /usr/local/lib не остались расширения от удалённой версии PHP, иначе они будут отображаться как отключенные в панели ISPmanager, в списке установленных расширений:

root@server:/root # ls /usr/local/lib/php/


Если видим что присутствует папки 2006061320090626 либо 20100525 - удаляем:

root@server:/root # rm -rf /usr/local/lib/php/20060613 /usr/local/lib/php/20090626 /usr/local/lib/php/20100525

Также при установке новой версии может возникнуть ошибка наподобие этой:

===>  php55-5.5.8 conflicts with installed package(s):
     php52-5.2.17_15

В таком случае нам поможет выполнение такой команды:

root@server:/root # make -C /usr/ports/lang/php52 deinstall clean

Всё, на этом процесс удаления PHP завершен, первый этап пройден.

2-й этап - установка необходимой версии

Переходим к установке нужной версии PHP. Устанавливать будем путём сборки из портов - не зря же мы их обновляли в самом начале.


Порты PHP располагаются в директории /usr/ports/lang


PHP 5.2 - /usr/ports/lang/php52
PHP 5.3 - /usr/ports/lang/php53
PHP 5.4 - /usr/ports/lang/php5


Далее, чтобы не писать каждый раз пути для php разных версий, рассмотрим установку на примере версии 5.2. Для версий 5.3 и 5.4 установка происходит аналогичным образом.


Переходим в директорию с php 5.2:

root@server:/root # cd /usr/ports/lang/php52


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

root@server:/usr/ports/lang/php52 # make clean


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

root@server:/usr/ports/lang/php52 # make config


В появившемся меню, перемещаясь по списку с помощью клавиш "Вверх" и "Вниз", отмечаем нажатием на пробел следующие пункты:
APACHE Build Apache module
MULTIBYTE Enable zend multibyte support
MAILHEAD Enable mail header patch
Php52 make config

Остальное оставляем как есть и нажимаем Enter.


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

root@server:/usr/ports/lang/php52 # make reinstall clean

Именно reinstall, а не install, иначе, во время сборки PHP, получим ошибку, сообщающую, что в системе уже есть pcre и просьбу выполнить make deinstall.


Дожидаемся окончания процесса, затем обновляем кеш установленного ПО панели ISPmanager:

  • ISPmanager 4:
/usr/local/ispmgr/sbin/pkgctl cache
  • ISPmanager 5:
/usr/local/mgr5/sbin/pkgctl recache noupdate

Для надёжности выполняем эту команду дважды.


Перезапускаем панель:

  • ISPmanager 4:
killall ispmgr
  • ISPmanager 5:
killall core

Выполняем эту команду до тех пор, пока не увидим: No matching processes were found


В ISPmanager переходим в "Возможности" и видим, что в списке установленного ПО появилась php установленной только что версии. Второй этап тоже пройден.

3-й этап - установка расширений

Так же как и сам PHP, расширения к нему находятся в директории /usr/ports/lang


PHP 5.2 - /usr/ports/lang/php52-extensions
PHP 5.3 - /usr/ports/lang/php53-extensions
PHP 5.4 - /usr/ports/lang/php5-extensions

Для примера возьмём PHP 5.2.

Переходим в директорию /usr/ports/lang/php52-extensions:

root@server:/usr/ports/lang/php52 # cd /usr/ports/lang/php52-extensions

Для удобной установки расширений можно вывести установленные ранее расширения в алфавитном порядке и скопировать полученный список себе в текстовый файл рядом с окном терминала :

root@server:/usr/ports/lang/php52 # cat /usr/local/etc/php/extensions.ini_back | cut -d'=' -f2 |sort -n

Для выбора необходимых расширений выполняем:

root@server:/usr/ports/lang/php52-extensions # make config

Php52 extensions
Перемещаясь по списку с помощью клавиш "Вверх" и "Вниз", отмечаем, нажимая на пробел, необходимые расширения, по окончанию нажимаем Enter.

Начинаем сборку:

Чтобы выключалась поддержка X11 по умолчанию выполним: echo "WITHOUT_X11=yes" >> /etc/make.conf

Если нам не нужны никакие особые опции и мы не будем ставить расширение sqlite, то можно слегка автоматизировать процесс установки расширений, добавив после make install параметр BATCH=yes, который автоматически будет выбирать опции по умолчанию, не ожидая ответа пользователя при установке каждого расширения:

root@server:/usr/ports/lang/php52-extensions # make install BATCH=yes clean

А если мы хотим настроить каждое расширение и готовы неотрывно глядеть в терминал в процессе, тогда выполняем такую команду:

root@server:/usr/ports/lang/php52-extensions # make install clean

В процессе установки расширений на экран время от времени будут выводиться окна, подобные тем, которые мы видели во время выполнения make config. При их появлении ничего не выбираем, сразу нажимаем Enter и наблюдаем дальше. Единственное, где стоит вмешаться - это установить поддержку кодировки UTF-8, если устанавливается расширение sqlite - при появлении окна с заголовком php52-sqlite-5.2, нажатием на пробел, отмечаем UTF8 Enable UTF-8 support и нажимаемEnter.
Php52 sqlite
После окончания процесса проверяем, что установились все нужные расширения - для этого выполняем команду:

root@server:/usr/ports/lang/php52-extensions # php -m

Результатом команды будет вывод списка установленных расширений. Если все необходимые расширения в списке присутствуют, то установка окончена. Остётся перезапустить веб-сервер Apache:

root@server:/usr/ports/lang/php52-extensions # service apache22 restart

или так:

root@server:/usr/ports/lang/php52-extensions # /usr/local/etc/rc.d/apache22 restart


Если же вывод команды php -m показал, что установились не все расширения, которые были выбраны при make config (такая вероятность вполне существует), то придётся установить нужные расширения по отдельности.
Тут есть два варианта:
1-й более простой, но менее интересный - установить средствами панели ISPmanager.
2-й - продолжить установку из портов.


Вариант первый.
В панели ISPmanager находим радел "Настройки сервера", переходим там в пункт "Расширения PHP". В правом верхнем углу нажимаем "Установить", выбираем необходимое расширение и нажимаем "ОК". После того как расширение появится в списке уже установленных расширений со статусом "Включено", повторяем процедуру снова, выбирая следующее необходимое расширение. Повторяем процедуру до тех пор, пока не будут установлены все нужные расширения.


Вариант второй.
Устанавливаем недостающие расширения из портов.


Ниже приведён список расположения в портах наиболее часто используемых расширений:

bz2 - /usr/ports/archivers/php52-bz2
zip - /usr/ports/archivers/php52-zip
zlib - /usr/ports/archivers/php52-zlib
iconv - /usr/ports/converters/php52-iconv
mbstring - /usr/ports/converters/php52-mbstring
gettext - /usr/ports/devel/php52-gettext
curl - /usr/ports/ftp/php52-curl
ftp - /usr/ports/ftp/php52-ftp
gd - /usr/ports/graphics/php52-gd
exif - /usr/ports/graphics/php52-exif
imap - /usr/ports/mail/php52-imap
bcmath - /usr/ports/math/php52-bcmath
calendar - /usr/ports/misc/php52-calendar
hash - /usr/ports/security/php52-hash
mcrypt - /usr/ports/security/php52-mcrypt
mhash - /usr/ports/security/php52-mhash
openssl - /usr/ports/security/php52-openssl
dom - /usr/ports/textproc/php52-dom
session - /usr/ports/www/php52-session


Заходим в нужную директорию, соответствующую устанавливаемому расширению и устанавливаем - make install clean. Например, для установки расширения dom, выполняем команду:

root@server:/usr/ports/lang/php52-extensions # cd /usr/ports/textproc/php52-dom && make install clean


Для PHP версий 5.3 и 5.4 расположение расширений в портах аналогичное, как и сама процедура установки, нужно лишь в путях изменить php52 на php53 (для 5.3) или php5 (для php 5.4). Путь к расширению gd для PHP версии 5.3 будет выглядеть так - /usr/ports/graphics/php53-gd, для версии 5.4 так - /usr/ports/graphics/php5-gd


Если в приведённом выше списке не оказалось нужного вам расширения и пути к нему, то его легко найти командой make search. Допустим, нам нужно установить расширение xsl, но мы не знаем его расположения в портах. Выполняем команду:

root@server:/usr/ports/textproc/php52-dom # cd /usr/ports && make search name=php52-xsl |grep Path

Результатом команды будет - Path: /usr/ports/textproc/php52-xsl

Далее переходим в полученную директорию и выполняем установку:

root@server:/usr/ports # cd /usr/ports/textproc/php52-xsl && make install clean

После того как все необходимые расширения будут установлены, перезагружаем веб-сервер Apache:

root@server:/usr/ports/textproc/php52-xsl # service apache22 restart

или так:

root@server:/usr/ports/textproc/php52-xsl # /usr/local/etc/rc.d/apache22 restart

 

1 comment

  • Joitsic
    Joitsic Saturday, 02 May 2020 14:22 Comment Link Report

    Спасибо!
    Реально работающий мануал по смене PHP
    Благодарю!

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.