Как мне перейти на последнюю версию PHP в CentOS с помощью yum?

22

Я нашел несколько сообщений в блоге об этом, но это скорее отсутствие описания возможных побочных эффектов.

Я мог бы действительно использовать некоторые подробности об этих шагах:

  1. Как добавить репозиторий с PHP 5.4 в yum
  2. Может ли это легко заменить текущую версию PHP в CentOS?
  3. Как я могу вернуться к официальному репо, если он поддерживает PHP 5.4? (текущий 5.3.3 в моей системе)
  4. Будет ли какой-нибудь потенциал сломать модули PHP, которые я сейчас использую?

Заметка

Люди успешно обновили с помощью того же метода на более новых версиях, и предлагают удалить конкретные версии в вопросе. Несмотря на то, что было бы полезно записывать версии на тот случай, если более новые версии действительно что-то сломают, я бы хотел оставить в записке последнюю успешную версию, предложенную сообществом.

Не стесняйтесь обновить это, если вы успешно обновились на других версиях.

  • Версии PHP: 5.4, 5.5, 5.6
  • Версия CentOS: 5, 6
Vicary
источник

Ответы:

19

Я следовал инструкциям из Install Apache / PHP 5.4.10 на Fedora 17/16, CentOS / RHEL 6.3 / 5.8 с небольшими изменениями. Это заняло, может быть, 10 минут. Мои точные команды показаны ниже. Обратите внимание, что первая команда должна была быть изменена с того, что показано в статье. Изменение было от epel-release-6-7.noarch.rpmдо epel-release-6-8.noarch.rpm.

  1. Как добавить репозиторий с PHP 5.4 в yum?

    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
    yum install http://rpms.remirepo.net/enterprise/remi-release-6.rpm
    
  2. Может ли это легко заменить текущую версию PHP в CentOS? Для меня следующие команды работали, и ни одна из моих существующих веб-страниц PHP не сломалась. Ваш пробег может варьироваться.

    yum --enablerepo=remi install httpd php php-common
    yum --enablerepo=remi install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml
    service httpd restart
    
  3. Как я могу вернуться к официальному репо, если он поддерживает PHP5.4? Я не проверял команды для удаления и переустановки PHP из репозиториев CentOS, но они должны работать.

    # Remove the Remi packages. Note the reversed command order
    yum remove php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml
    yum  remove httpd php php-common
    # Install the CentOS packages. 
    yum install httpd php php-common
    yum install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml
    
  4. Будет ли какой-нибудь потенциал сломать модули PHP, которые я сейчас использую? Да. Используя последнюю версию CentOS (6.2?) С Zend, установленным с помощью установщика Zend, вышеприведенное обновление сломало Zend.

Все вышеперечисленные команды были запущены как root. Рекомендуется войти в систему как непривилегированный пользователь и использовать его sudo. (Это виртуальная машина разработки с текущим снимком ...)

Кроме того, НЕ включайте репозиторий Remi по умолчанию - в прошлом я умел и включал его по умолчанию, и все сломалось, даже с приоритетом репозитория.

Джефф Беншетлер
источник
3
Вещи часто становятся ужасными с реми. Я предпочитаю использовать репозиторий iuscommunity для обновления php. Другой способ - использовать репозиторий на Zend, но для меня это немного накладно.
Казимерас Алиулис
1
@KazimierasAliulis К сожалению, репозиторий IUS вызывает ад зависимости, используя несовместимые имена пакетов и файлов. Я не могу рекомендовать его использовать.
Майкл Хэмптон
Очень подробное описание. Поскольку у меня нет кода, связанного с движком Zend, в моем случае это не должно иметь значения, верно?
Vicary
1
@MichaelHampton Я использую, yum --enablerepo=remi updateи он заботится обо всех связанных пакетах php, выглядит как лучшее решение. Сервер работает без проблем уже несколько дней, спасибо за всю информацию.
Vicary
1
Примечание: парень забыл добавить phpв список установки, что вызвало у меня много проблем, так как apache не обслуживал php-файлы, поэтому не забудьте добавить это при использовании
eric.itzhak
9

Улучшение по сравнению с другим ответом Webtatic:

1 Используя руководство на http://www.webtatic.com/packages/php54/ :

rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

2 Сначала вы должны увидеть, какие существующие установленные пакеты нуждаются в замене, вы можете сделать это, используя оболочку yum, чтобы объединить удаление php-common и установку php54w-common в одной транзакции (чтобы общие зависимости не удалялись)

yum shell
> remove php-common
> install php54w-common
> run
…
Is this ok [y/N]: n

Не говорите «y» для результатов, но обратите внимание на все пакеты, упомянутые в «Удаление для зависимостей», например

Removing for dependencies:
 php
 php-cli
 php-pear
 php-pecl-memcache
 php-mysql

Если в этом списке есть другие пакеты, кроме php *, вы не можете легко переключиться на Webtatic PHP 5.4, но вам придется исследовать альтернативы. В Webtatic есть пакеты для замены всех базовых пакетов php (для подтверждения см. Пакеты, перечисленные на странице, на которую ссылается пункт 1.), поэтому проблем не должно быть, если только вы не используете сторонние репозитории, в которых установлены пакеты, зависящие от конкретной версии php установлены.

Для остальной части установки (все еще в оболочке yum) вы просто удаляете эти пакеты и устанавливаете их аналоги php54w- *:

> remove php-common php php-cli php-pear php-pecl-memcache php-mysql
> install php54w-common php54w php54w-cli php54w-pear php54w-pecl-memcache php54w-mysql
> run
…
Is this ok [y/N]: y

После этого вы должны увидеть только те пакеты, которые вы установили для удаления и установки в списке, и вы можете подтвердить установку для переключения. Любые службы, запущенные в настоящее время с загруженным php, необходимо перезапустить, например httpd или php-fpm.

Что касается «беспрепятственного», любые изменения программного обеспечения, происходящие в то время, когда пользователи имеют доступ к веб-сайту, должны быть полностью поняты. Общие библиотеки, которые удаляются и добавляются, когда процесс еще не загружен, могут потенциально загружаться, пока разделяемая библиотека отсутствует. Лучше делать обновления программного обеспечения, как это в автономном режиме, и желательно сначала протестировать их на непроизводственной машине, чтобы убедиться, что процесс работает должным образом.

3 Чтобы перейти к гипотетическому базовому пакету CentOS php54 (CentOS 5 использовал префикс php53), вы просто запускаете вышеупомянутые шаги, заменяя удаление php удалением php54w, и установку php54w установкой php54, например

yum shell
> remove php54w-common
> install php54-common
> run
…
Is this ok [y/N]: n
…
> remove php54w-common php54w php54w-cli php54w-pear php54w-pecl-memcache php54w-mysql
> install php54-common php54 php54-cli php54-pear php54-pecl-memcache php54-mysql
> run
Is this ok [y/N]: y

Однако, что касается переключения на гипотетическую базу php54, для некоторых пакетов, скорее всего, не будет альтернатив (например, в CentOS 5 не было расширения php53-pecl-memcache), а в Webtatic есть пакеты, которых нет в базе CentOS (например, php54w -pecl-zendopcache). Если они отсутствуют, то обычно у вас нет другого выбора, кроме как напрямую использовать pecl для их установки.

4 Любое обновление PHP может привести к ошибкам, и веб-сайты должны быть проверены повторно. Это не относится только к Webtatic, но общая идея, что новые функции вводят новые ошибки.

В отличие от репозитория Remi в принятом ответе, репозиторий Webtatic EL6 никогда не использует те же имена пакетов, что и базовые репозитории CentOS, поэтому не будет переопределять установку / обновление пакетов, на которые вы не собираетесь переключаться, и поэтому включен по умолчанию.

Отказ от ответственности: я владелец / сопровождающий Webtatic

Энди
источник
Метод оболочки yum действительно хорош для наблюдения за зависимостями, спасибо.
Победа
@ Энди, отлично, подробно пиши, спасибо. Как я могу изменить стандартное cli (и только cli) в PHP на 5.4 в CentOS 6?
Гайя
0

Вы можете найти php 5.4.9 здесь для установки yum:

http://www.webtatic.com/packages/php54/

Вы можете сделать «rpm -qa | grep php», чтобы увидеть все ваши текущие пакеты php, и «rpm -e», чтобы удалить. Я не знаю ваши текущие модули, но стоит проверить перед обновлением.

TheDayIsDone
источник
Вы как бы ответили 1. Когда дело доходит до обслуживания сервера, это не просто его установка и запуск тестов, я действительно могу использовать больше информации, прежде чем что-то делать.
Vicary