Как мне перейти с PHP 7 на PHP 5.6 в Ubuntu 16.04?

Я пытаюсь вернуть свою версию PHP до 5.6 из 7, и хотя я удалил PHP 7, а затем установил PHP 5.6, я все еще работаю с версией 7.

Есть ли простой способ для перемещения по версиям PHP, где apache, phpMyAdmin и co настроены соответствующим образом?

Простой способ изменить текущую версию PHP на лету и даже сайт за сайтом был бы отличным.

4 ответа

Решение

Обновить
Сегодня у меня снова проблема с PHP 7, несмотря на то, что я отключил php7.0 модуль apache: phpinfo показывал php 7 используя fastCGI...
... Так что, если после выполнения приведенных ниже инструкций вы столкнетесь с такой ситуацией, вам может потребоваться отключить proxy_fcgi модуль apache:

sudo a2dismod proxy_fcgi proxy; sudo service apache2 restart

1. Переустановите PHP 5.6

Для меня сработало это руководство: http://www.lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

На самом деле не требуется удалить php7.0, вы можете установить php5.6 вместе (также потому, что у вас будут проблемы с зависимостью phpmyadmin пакет, который требует php7.0)

Если предположить, libapache2-mod-php это подходящий способ включить PHP в Apache для вас, вы можете действовать следующим образом:

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.0-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0

2. Переключите версию PHP:

  • С php5.6 до php7.0:

    • Apache:

      sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
      
    • CLI:

      sudo update-alternatives --set php /usr/bin/php7.0
      
  • С php7.0 до php5.6:

    • Apache:

      sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart
      
    • CLI:

      sudo update-alternatives --set php /usr/bin/php5.6
      

Ubuntu 16.04 поставляется с php 7.0, и немного php приложения могут все еще терпеть неудачу с php 7.0 Поэтому в некоторых случаях может иметь смысл php 7.0 а также php 5.x, так что вы можете выбрать, какую версию использовать для ваших нужд в любое время.

Вы можете сделать это с:

xavi@computer# sudo su
root@computer# add-apt-repository ppa:ondrej/php
root@computer# apt-get update
root@computer# apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0 php5.6-curl php5.6-gd php5.6-mcrypt php5.6-xml php5.6-xmlrpc

Установка обоих php5.6 & php7.0 был чист в моем случае: не жалуются на проблемы и т. д.

Переключиться с php 5.6 в php 7.0 вам нужно сделать две вещи:

# For php in web apps
sudo a2dismod php5.6 && sudo a2enmod php7.0 && sudo service apache2 restart
# For php-cli in the command line
sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php

или с php7.0 до php5.6:

# For php in web apps
sudo a2dismod php7.0 && sudo a2enmod php5.6 && sudo service apache2 restart
# For php-cli in the command line
sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php

Вы также можете быстро проверить, какой из них используется, запустив php -v.

В вашем вопросе отсутствуют важные детали, поэтому я отвечу более широко.

Предполагая, что вы используете пакеты, есть несколько важных деталей:

  1. Apache2 может быть настроен на использование apache2 SAPI с использованием libapache2-mod-php7.0 пакет или FPM SAPI с помощью php7.0-fpm с mod_proxy_fcgi,

  2. Ubuntu 16.04 имеет только PHP 7.0 в репозиториях, вы можете использовать ppa:ondrej/php добавить поддержку PHP 5.6, используя похожую схему именования (например, libapache2-mod-php5.6 или же php5.6-fpm).

  3. Если вы используете Apache2 SAPI (libapache2-mod-php*), вам нужно отключить PHP 7.0 после установки libapache2-mod-php5.6 запустив a2dismod php7.0 и включите PHP 5.6, запустив a2enmod php5.6,

  4. Если вы используете FPM SAPI (php*-fpm) тогда нужно поменять сокет FPM unix с /run/php/php7.0-fpm.sock в /run/php/php5.6-fpm.sock,

  5. Пожалуйста, помните, что для модулей, связанных с PHP (например, MySQL), соглашение об именах phpX.Y-<ext>php7.0-mysql а также php5.6-mysql), но для внешних модулей PECL (например, APCu, mongodb, ...) это просто php-<ext>php-apcu, php-mongodb). Я рекомендую бежать apt-cache search php <ext> в вашей системе, чтобы найти правильное имя пакета, прежде чем задавать вопросы в Интернете.

Я думаю, что вы должны удалить свои пакеты php и установить php5.6. Вы можете действовать следующим образом:

sudo apt-get purge php7.*
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php5.6

Вы можете тогда проверить версию своего php, чтобы быть уверенным. Это делается как показано ниже:

php -v
Другие вопросы по тегам