Как установить php 7 для запуска рядом с php 5 на ubuntu с nginx

10

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

Я посмотрел на управление версиями PHP и увидел, что можно запустить две версии, хотя те, которые я нашел, для apache. Я ищу более четкие инструкции о том, как это сделать в nginx. У меня также есть hhvm, работающий в случае, если это имеет значение.     

задан Dreaded semicolon 23.03.2016 в 07:31
источник

1 ответ

12

Во-первых, вам необходимо установить php5-fpm и php7.0-fpm из PPA Ondřej Surý для совместного установки php5 и . php7.0 :

sudo apt-get install python-software-properties
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

Затем мы с nginx предлагаем использовать пакеты FPM. Таким образом, установите пакеты соответственно:

sudo apt-get update

# We need to ***remove*** php5 packages, so we can use php5.6 packages
# from the PPA instead
sudo apt-get remove php5-common
sudo apt-get autoremove

# Now we install php5.6 packages.
sudo apt-get install php5.6-fpm

# Now, install php7.0-fpm.  You may need to install separate PHP plugins
# for databases, extensions, etc. later.
sudo apt-get install php7.0-fpm

Источник: Ответ на вопрос "Как установить php 7?" вопрос , и пользовательские комментарии и изменения от меня.

Во-вторых, nginx . nginx может быть не хуже ваших конфигураций. Вероятно, у вас есть блок обработки PHP на вашем блоке сервера nginx, подобном этому (из конфигурационного примера «default»):

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Эта конфигурация переходит только к php5-fpm . По сути, это будет применяться ко всему серверному блоку. Самый простой способ сделать это - иметь второй серверный блок (для, скажем, test.domain.tld ), и вместо этого указать место назначения PHP 7.0 fastcgi_pass . В php7.0 на Xenial это закончится чем-то вроде этого (извлечено из недавно загруженного исправления в пакет Xenial nginx), однако я не знаю макета пакета Ondrej, поэтому я не могу дать точные особенности там (проверьте /etc/php7.0/fpm/pool.d/www.conf или аналогичный, чтобы определить, где он прослушивается):

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.0-fpm:
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}

Вам нужно будет сделать что-то похожее для вашего блока php5 , чтобы проверить, что php5.6 сокеты используются вместо встроенного сокета php5 (который мы только что удалили).

Затем используйте второй тестовый домен, чтобы запустить тестирование php7.0 . Однако сделайте копию своего сайта, если вы хотите это сделать - вероятно, потребуется отдельная тестовая копия, чтобы после того, как вы закончили работу с php7.0 , вы можете просто «переключиться» над "без проблем.

К сожалению, нет простого способа сделать php5 и php7.0 работать в одном и том же серверном блоке, не изменяя пути для вашего сайта, приложений и т. д., чтобы иметь один для php5 и один для %код%; такая переработка сайтов может стать неприятной, поэтому предлагается запустить две отдельные копии кода сайта, одну для php7.0 миграции и одну для php7.0 в процессе производства.

    
ответ дан Thomas Ward 23.03.2016 в 13:24
источник