- Установка и смена версий PHP: пошаговая инструкция
- Как установить PHP на сервер
- Ручная установка
- ISPmanager: установка php
- Как узнать версию PHP
- Узнаем версию через phpinfo()
- Через терминал
- Через ISPmanager
- Где находятся настройки версий PHP в ISPmanager
- Как выбрать версию PHP при работе в командной строке (SSH)
- Что делать, если не обрабатываются PHP-скрипты
- Заключение
- Жонглируем версиями PHP в системе
Установка и смена версий PHP: пошаговая инструкция
PHP — это скриптовый язык программирования, который обычно используется для разработки веб-приложений. С его помощью можно создавать динамические сайты, которые будут адаптировать страницы под конкретного пользователя. Такие сайты не хранятся на сервере в готовом виде, а создаются на сервере после запроса от пользователя. Это означает, что PHP — это серверный язык, т.е. написанные на нём скрипты выполняются на сервере, а не на компьютере пользователя.
Существует большое количество разных версий PHP. С появлением каждой новой версии, язык становится все более мощным и гибким, предлагая разработчикам больше возможностей для создания современных веб-приложений. Но не все сайты переходят или готовы перейти на более современную версию и остаются на старых.
Поэтому смена версий является необходимой задачей для многих веб-разработчиков. Некоторым из них хочется воспользоваться новыми функциями, которые появляются в новых версиях языка, а другим нужно устранить ошибки и улучшить безопасность уже существующего приложения. В этой статье мы разберем, как установить PHP на Ubuntu и как переключаться между разными версиями языка.
Как установить PHP на сервер
Установить PHP можно вручную или через панель управления, такую как ISPmanager. Разберем оба способа.
Ручная установка
Чтобы установить PHP на Ubuntu Server, совершите следующие действия:
sudo apt install build-essential libssl-dev
После этого PHP будет установлен на сервер. Осталось установить веб-сервер для работы с языком. Настройка может включать в себя указание модуля PHP в конфигурационном файле веб-сервера и настройку обработки файлов с расширением .php.
В конце перезапустите веб-сервер. Например, для перезагрузки Apache вы можете выполнить следующую команду:
sudo service apache2 restart
ISPmanager: установка php
ISPmanager — это панель управления веб-сервером. Она включает в себя множество функций, таких как управление доменами, аккаунтами пользователей, базами данных, почтовыми ящиками и многое другое. Панель управления может использоваться для настройки сервера, мониторинга ресурсов, а также для обеспечения безопасности и доступа к серверу.
Через ISPmanager вы можете управлять версиями PHP, в том числе и устанавливать дополнительные. Для установки выполните следующие шаги:
- Войдите в ISPmanager от имени администратора.
- Перейдите в раздел «Конфигурация ПО».
- Выберите нужную версию программного обеспечения:
Как узнать версию PHP
Есть несколько способов узнать, на какой версии работает сайт:
Узнаем версию через phpinfo()
- Сохраните файл в корневой директории веб-сайта (там, где расположен файл index.html или index.php).
- Откройте этот файл в браузере, набрав в адресной строке http://адрес_вашего_сайта/phpinfo.php .
Вы увидите страницу такую страницу с подробной информацией:
После того, как узнаете версию, не забудьте удалить файл phpinfo.php , так как он содержит важную информацию о конфигурации сервера, которую могут использовать злоумышленники.
Через терминал
Выполните в терминале команду:
Вы получите подобный вывод:
Через ISPmanager
В ISPmanager версия PHP, на которой работает сайт, находится в настройках сайта:
Где находятся настройки версий PHP в ISPmanager
В ISPmanager настройки версий расположены в разделе «Настройки» -> «Настройки PHP». Например, в этом разделе вы можете включить или отключить различные расширения PHP. Обратите внимание, что в ISPmanager вы можете управлять только теми версиями, которые уже установлены на сервере.
А вот как изменить версию php в ISPmanager :
Обратите внимание, что некоторые скрипты и расширения могут работать только с определенными версиями PHP. Перед тем, как сменить версию, убедитесь, что все скрипты и расширения, которые вы используете, поддерживают новую версию. В противном случае сайт может стать недоступен или работать некорректно.
Как выбрать версию PHP при работе в командной строке (SSH)
В некоторых случаях отсутствует возможность сменить версию через панель управления. В таких ситуациях можно воспользоваться командной строкой. Чтобы переключиться между установленными версиями на Ubuntu, следуйте этим шагам:
- Убедитесь, что у вас установлено несколько версий PHP. Чтобы увидеть список установленных пакетов, выполните эту команду:
- Установите пакет php-switch , который позволяет легко переключаться между установленными версиями PHP:
sudo apt-get install -y php-switch
- Воспользуйтесь командой php-switch , чтобы переключиться между установленными версиями PHP. Например, чтобы переключиться на PHP 7.4, выполните эту команду:
Помните, что при переключении между версиями PHP могут возникнуть проблемы совместимости с вашим кодом.
Что делать, если не обрабатываются PHP-скрипты
Если на вашем сервере не обрабатываются PHP-скрипты, то сначала следует проверить работу web-сервера. Откройте браузер и перейдите на страницу сайта, на котором не работают PHP-скрипты. Если страница открывается, но на ней не отображается результат работы PHP-скрипта, то возможно проблема с PHP.
Чтобы узнать, в чем заключается проблема, можно сделать следующее:
Для этого выполните команду, используя вашу версию php:
sudo service php7.4-fpm status
Если сервис запущен, то в выводе команды должно быть указано active (running) . Если сервис не запущен, то запустите его, используя команду:
sudo service php7.4-fpm start
Для этого можно использовать команду:
Эта команда выведет последние строки лог-файла PHP, что может помочь в определении проблемы.
Откройте файл php.ini в текстовом редакторе и проверьте, что опция display_errors установлена в значение On . Это позволит отображать ошибки PHP на страницах сайта.
Откройте скрипты в текстовом редакторе и поищите в них ошибки синтаксиса или другие ошибки, которые могут привести к неработоспособности скриптов.
Например, в файле .htaccess могут быть указаны ограничения на работу скриптов для определенных директорий.
Если скрипты работают на другом сервере, то возможно проблема с конфигурацией текущего сервера.
Заключение
Мы рассмотрели установку PHP на сервер вручную и с помощью популярной панели ISPmanager. Если вы используете другую панель, возможно, вам пригодятся наши инструкции из Базы знаний по настройке PHP в панелях Fastpanel и ISPConfig.
Жонглируем версиями PHP в системе
Проблема “ хочу новую версию %software% на моем стареньк … стабильном Debian/CentOS…” так же стара, как *nix-мир. Способов добиться желаемого хватает. Есть масса решений как притащить в систему несколько версий одного и того же софта. Но дальше хочется не просто иметь ещё одну версию, но и управлять тем, какая из версий доступна в системе по умолчанию, для конкретных приложений или пользователей.
Что делать, если хочется сменить системную версию PHP на одну из кастомных сборок? Давайте отталкиваться от того, что у вас на сервере уже установлено несколько версий PHP и вы хотите, чтобы в консоли команда php была конкретной версии, отличающаяся от той, что шла с системой. В этой статье я расскажу, как правильно это настроить, чтобы не было проблем с будущими пакетными обновлениями.
В качестве примера возьмём сервер на CentOS 7, где установлен родной PHP:
# php -v PHP 5.4.16 (cli) (built: May 12 2016 13:45:17) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.0.12, Copyright (c) 2002-2015, by ionCube Ltd.
Также на сервере установлен наш Plesk с парой своих сборок PHP:
# rpm -qa | grep plesk-php.*-release plesk-php56-release-5.6.22-centos7.16052711.x86_64 plesk-php70-release-7.0.7-centos7.16052710.x86_64
Допустим, мы хотим переключить систему на использование PHP 5.6 по умолчанию (переключать глобально PHP с версии 5.4 на 7 как-то сс… страшно — чему-то в системе может поплохеть от такого). Бинарь PHP 5.6 лежит у нас тут:
# /opt/plesk/php/5.6/bin/php -v PHP 5.6.22 (cli) (built: May 27 2016 11:45:28) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.0.18, Copyright (c) 2002-2015, by ionCube Ltd. with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
Как же сделать так, чтобы система использовала эту, нужную нам, версию PHP?
Сначала посмотрим на системную переменную PATH
# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
В ней перечислен список директорий, в которых ищутся программы по имени. Главный нюанс — поиск в директориях происходит последовательно и используется первый найденный результат. Текущий путь до текущего бинарника PHP мы можем увидеть с помощью команды:
Как видно из PATH , /usr/local/bin находится в списке раньше, чем /usr/bin . Значит, если мы поместим ссылку на альтернативную версию PHP “пораньше”, в /usr/local/bin , то именно она и будет использоваться при вызове команды php вместо /usr/bin/php . Мы можем создать эту ссылку руками (и всё даже будет работать), но правильнее использовать специально созданную для этих целей утилиту update-alternatives (в CentOS это просто alternatives , но есть симлинка update-alternatives , поэтому дальше будем оперировать именно этой командой, как универсальной для Debian/Ubuntu/CentOS/и т.д.).
Теперь, давайте зарегистрируем все доступные версии PHP с помощью этой команды:
# update-alternatives --install /usr/local/bin/php php /opt/plesk/php/5.6/bin/php 10 # update-alternatives --install /usr/local/bin/php php /opt/plesk/php/7.0/bin/php 20 # update-alternatives --install /usr/local/bin/php php /usr/bin/php 30
Цифры 10, 20 и 30 — это приоритет. Он работает для автоматического выбора, если администратор сам не выбрал конкретную версию. Самое большое число определяет выбор «по умолчанию».
Проверим, что php теперь указывает на созданную командой симлинку:
# update-alternatives --list | grep php php auto /usr/bin/php # update-alternatives --display php php - status is auto. link currently points to /usr/bin/php /opt/plesk/php/5.6/bin/php - priority 10 /opt/plesk/php/7.0/bin/php - priority 20 /usr/bin/php - priority 30 Current `best' version is /usr/bin/php.
Давайте разберемся, что же update-alternatives сделала для нас:
# which php /usr/local/bin/php # ls -l /usr/local/bin/php lrwxrwxrwx. 1 root root 21 Jul 2 10:03 /usr/local/bin/php -> /etc/alternatives/php # ls -l /etc/alternatives/php lrwxrwxrwx. 1 root root 26 Jul 2 10:03 /etc/alternatives/php -> /usr/bin/php
Как видно, она создала цепочку симлинок и теперь по требованию просто меняет промежуточную симлинку на нужный нам бинарь.
# php -v PHP 5.4.16 (cli) (built: May 12 2016 13:45:17) .
То есть, мы успешно настроили группу PHP в update-alternatives , где по умолчанию в автоматическом режиме выбран системный PHP. Сейчас у нас есть возможность переключить команду PHP на любую другую версию..
Давайте переключимся на PHP версии 5.6, которая идет в поставке с Plesk’ом:
# update-alternatives --config php There are 3 programs which provide 'php'. Selection Command ----------------------------------------------- 1 /opt/plesk/php/5.6/bin/php 2 /opt/plesk/php/7.0/bin/php *+ 3 /usr/bin/php Enter to keep the current selection[+], or type selection number: 1
Проверяем, что переключение произошло:
# php -v PHP 5.6.22 (cli) (built: May 27 2016 11:45:28) … # update-alternatives --display php php - status is manual. link currently points to /opt/plesk/php/5.6/bin/php …
Все отлично работает. Теперь в системе используется нужная нам версия PHP и я не опасаюсь, что эта настройка слетит при следующих пакетных обновлениях.
С помощью update-alternatives можно выбирать не только версию PHP, но и многие другие вещи, например разные версии phpunit или редактор по умолчанию в системе. Подход этот универсален для различных систем. Не изобретая своего велосипеда, используя существующие инструменты, вы можете быть уверенным, что не устроили для ваших коллег квеста “Ну почему оно так работает?!”. Настраивайте свою систему правильно.
P.S. Приглашаю пофлеймить про phpenv в комментарии 🙂