Как сменить версию 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 <Este endereço de email está protegido contra piratas. Necessita ativar o JavaScript para o visualizar.; 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/
Если видим что присутствует папки 20060613, 20090626 либо 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
Остальное оставляем как есть и нажимаем 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
Перемещаясь по списку с помощью клавиш "Вверх" и "Вниз", отмечаем, нажимая на пробел, необходимые расширения, по окончанию нажимаем 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.
После окончания процесса проверяем, что установились все нужные расширения - для этого выполняем команду:
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
Host for NET
Website: host-for.net/ruRelated items
1 comment
-
Joitsic sábado, 02 maio 2020 14:22 Comment Link
Спасибо!
Реально работающий мануал по смене PHP
Благодарю!