Как установить две версии PHP и легко переключаться между ними?

69

Я хочу, чтобы на моем компьютере Ubuntu были установлены как PHP 5.2.17, так и PHP 5.3.5 и переключались по моей необходимости. Как я могу это достичь?     

задан Debiprasad 24.06.2011 в 14:07
источник

9 ответов

55

Для этого вы можете использовать диспетчер версий PHP. Различные менеджеры версий доступны, например:

Мой любимый phpbrew. Надеюсь, это поможет.

    
ответ дан aneeshep 03.02.2013 в 08:32
16

Вы можете запускать сразу две разные версии PHP, но это не так просто, как просто apt-получение. Вам нужно запустить одну отдельно установленную версию и выполнить ее в соответствии с настройками конфигурации apache.

Вы можете сделать это, используя fastcgi, например: в основном то, что вы ищете, - это конфигурация, которую вы видите на на этой странице . Вы добавляете другой обработчик в свой конфиг в зависимости от ситуации / порта / домена, который вам нужен. Уловкой после установки обеих версий является этот шаг:

=== с этой страницы ==

  
  1. Последним шагом было создание виртуальных хостов. В конце концов, у меня есть три файла в / etc / apache2 / sites-enabled: 000-default, php5.3.17 и   php5.4.7 Со следующим содержанием
  2.   

по умолчанию:

    <VirtualHost *:80>
      ServerName localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>

php5.3.17:

    <VirtualHost *:80>
      ServerName 5317.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>

php5.4.7:

    <VirtualHost *:80>
      ServerName 547.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php547.fcgi
      </Directory>
    </VirtualHost>

См. полную установку связанного вопроса . Не забудьте также взглянуть на две ссылки в заголовке, они выглядят как хорошие учебники (но менее сжатые). Это и That

(не следует учитывать тот факт, что связанный вопрос является большим, без принятого ответа. Метод должен (и работает) работать нормально, но пользователь забыл использовать <?php и использовал <? с shorttags off, см. комментарии)

    
ответ дан Nanne 01.02.2013 в 11:45
10

Я установил php 5.6 и 7.0, но помимо всех советов он продолжал работать 5.6, поэтому эта команда сохраняет день (в моем случае я chosse вариант 1 и перезапустите apache):

sudo update-alternatives --config php
    
ответ дан Marcelo Ágil 19.03.2017 в 15:06
5

Это работает для меня: Ссылка

То же, что и скрипт из «Growling Flea», но с использованием новых версий.

  

Добавить PPA

     

Пакеты PHP 5.6 и PHP 7.0 принадлежат сторонним PPA, а не   предоставляемые официальными репозиториями Ubuntu от Canonical. PPAs   Я рекомендую здесь от Ondřej Surý, который поставляет PHP для Debian   (который затем используется Ubuntu), так что, хотя он не является официальным   репозиторий, он не совсем случайный! Сам PPA    здесь

     

Чтобы добавить PPA к вашей настройке:

sudo add-apt-repository ppa:ondrej/php  
     

Затем мы также захотим получить информацию о том, что предлагается   этот новый PPA, а затем запустите:

sudo apt-get update   
     

Установить новые версии PHP

     

У меня уже были некоторые из пакетов php5, но я не   удалите что-нибудь, я просто позволяю apt разрабатывать то, что он хотел сделать, когда   Я попросил его установить новые версии:

sudo apt-get install php5.6 php7.0
     

Это привело к большому количеству жалоб на споры и множество конфликтов.   Первая предлагаемая резолюция заключалась в том, чтобы удалить все запасы php5   пакетов, чтобы PHP 5.6 мог быть установлен - так что я просто принял   первое предложение.

     

Я использую apache, поэтому эта настройка дала мне apache с php5.6 и php7.0   доступных модулей и фактически загруженный модуль php5.6.

     

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

     

Конфигурирование и изменение версий

     

Теперь у вас есть две совершенно разные версии PHP, установленные на вашем   системы, так что давайте посмотрим, куда пошли все куски!

     

Все файлы конфигурации находятся в /etc/php/5.6 и /etc/php/7.0   соответственно - внутри здесь вы можете настроить, какие расширения   загружаются, устанавливают параметры ini и все остальное для каждой версии   в изоляции.

     

Я пользователь apache, и, как я уже говорил, оба модуля доступны. Так   для переключения с одного на другой мне нужно:

sudo a2dismod php5.6
sudo a2enmod php7.0
sudo service apache2 restart
     

Для пользователей nginx изменения почти такие же, Digital Ocean   хорошая документация по этому поводу (у них есть отличные документы!), поэтому проверьте   их руководство:    Ссылка   так как он включает раздел по реконфигурации nginx для использования другой версии   PHP.

     

Из командной строки у меня есть как php5.6, так и php7.0, доступные как   команды. У меня также есть команда php - посмотрите в / etc / alternatives   чтобы увидеть, что он символизирует определенную версию PHP cli *. Ты можешь   также быстро проверьте, что вы используете, запустив php -v .

     

& амп; AST; более конкретно, запустите php, чтобы посмотреть, какая версия PHP используется, но это, вероятно, укажет на /usr/bin/php , что для   я сам является символической ссылкой на команду /etc/alternatives/php .

     

Работа с расширениями

     

Этот PPA поставляется с обычным пакетом php-pear, который предлагает формулу   для обеих версий PHP, поэтому любые расширения, которые доступны   через PECL можно установить обычным способом. Вам также понадобится   соответствующие заголовки, поэтому либо php5.6-dev, либо php7.0-dev должны быть   установлен.

     

Когда установка pecl завершится, вы получите примечание, чтобы добавить   * .so файл на ваш php.ini; на самом деле лучше всего здесь посмотреть, что находится в /etc/php/mods-available . Будут некоторые   модули уже здесь, каждый в своем собственном файле, названном после расширения   и заканчивается на .ini. Вы можете скопировать его для использования в качестве шаблона или создать   свою собственную и поместить всю соответствующую конфигурацию для расширения в   он (как минимум, вам нужно extension=[extensionName].so ).

     

Как только новое расширение доступно в доступных моделях, включите и затем проверьте его   делая:

sudo phpenmod extension  
php -m  
     

Это создаст символические ссылки в нужных местах для вашего текущего   версию PHP для загрузки этого модуля, и вы должны увидеть его в списке   модулей, выводимых на php -m . Совет: если вы не видите его в   вывода, прокрутите весь путь до вершины вывода и посмотрите, есть ли   любые полезные сообщения об ошибках там.

    
ответ дан Daniel Pineda 20.05.2017 в 10:08
3

Из этого сообщения , Я просто приводил в порядок команды и объяснял, как мне служили (Ubuntu 12.04)

Этот метод дает вам:

  1. скрипт с меню, который позволяет переключаться между установленными версиями php (не оба одновременно)

  2. различные версии PHP, установленные на вашем сервере

  3. разделенные файлы conf

Установите все версии, которые вам нужны (у меня два)

Установить зависимости:

sudo apt-get install flex apache2-threaded-dev libxml2-dev apache2 apache2-mpm-prefork apache2-threaded-dev apache2-utils apache2.2-bin apache2.2-common

Сначала установите PHP 5.3. Загрузите источники php

md5sum Downloads/php-5.3.10.tar.bz2
mkdir ~/Sources
cd ~Sources/
cp -Rf ../Downloads/php-5.3.10.tar.bz2 .
tar xjf php-5.3.10.tar.bz2
cd php-5.3.10/
sudo mkdir /usr/local/php/php_5.3.10

Сначала установите PHP5.6. Загрузите источники php

md5sum Downloads/php-5.6.11.tar.bz2
mkdir ~/Sources
cd ~Sources/
cp -Rf ../Downloads/php-5.6.11.tar.bz2 .
tar xjf php-5.6.11.tar.bz2
cd php-5.6.11/
sudo mkdir /usr/local/php/php-5.6.11

Версии сценария PHP: Создайте файл с именем php.sh и поместите его в /bin/ :

#!/bin/bash
opcion=0
cat << CABECERAMENU
Opciones del menu
1 => PHP 5.3.10
2 => PHP 5.6.11
CABECERAMENU
echo -n "Ingrese su eleccion: "
read opcion
echo
case $opcion in
    "1")
        rm /etc/apache2/php.conf
        ln -s /usr/local/php/php_5.3.10.conf /etc/apache2/php.conf
        /etc/init.d/apache2 restart
    ;;
    "2")
        rm /etc/apache2/php.conf
        ln -s /usr/local/php/php_5.6.11.conf /etc/apache2/php.conf
        /etc/init.d/apache2 restart
    ;;
    *)
        echo "Opcion no valida"
    ;;
esac

Скомпилируйте и установите php 5.3:

cd ~/Sources/php-5.3.10/
sudo ./configure --prefix=/usr/local/php/php_5.3.10 --with-config-file-path=/usr/local/php/php_5.3.10/lib --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-apxs2=/usr/bin/apxs2 --enable-zip --with-gd --with-curl --with-xmlrpc --with-freetype-dir=/usr/lib/x86_64-linux-gnu  --with-jpeg-dir=/usr/lib/x86_64-linux-gnu --with-pdo-mysql --with-pdo-pgsql --enable-soap
sudo make clean
sudo make
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/lib/apache2/modules/libphp5.*
sudo make install
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/local/php/php-5.3.10/modules/libphp5.so
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.3.10/modules/
ls -lhart /usr/local/php/php_5.3.10/modules/
sudo a2dismod php5
sudo service apache2 restart

Скомпилируйте и установите php 5.6

cd ~/Sources/php-5.6.11
sudo ./configure --prefix=/usr/local/php/php_5.6.11 --with-config-file-path=/usr/local/php/php_5.6.11/lib --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-apxs2=/usr/bin/apxs2 --enable-zip --with-gd --with-curl --with-xmlrpc --enable-calendar --enable-sockets --with-freetype-dir=/usr/lib/x86_64-linux-gnu  --with-jpeg-dir=/usr/lib/x86_64-linux-gnu --with-pdo-mysql  --with-pdo-pgsql --enable-soap
sudo make clean
sudo make
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/lib/apache2/modules/libphp5.*
sudo make install
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/local/php/php_5.6.11/modules/libphp5.so
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.6.11/modules
ls -lhart /usr/local/php/php_5.6.11/modules
sudo a2dismod php5
sudo service apache2 restart

Давайте их использовать:

$ sudo php.sh
Opciones del menu
1 => PHP 5.3.10
2 => PHP 5.6.11
Ingrese su eleccion: 1

 * Restarting web server apache2                                                                                                                                                                                                                                        apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
    
ответ дан PegasusOnlin 30.08.2016 в 13:26
2

Проблемы:

  1. Один экземпляр apache не может одновременно запускать две разные версии PHP (по крайней мере, насколько я знаю).

  2. Две разные версии PHP не могут быть установлены из пакетов, поскольку они конфликтуют (и попробуйте перезаписать одни и те же каталоги).

Решение:

  • для b) Скомпилируйте «другую» версию PHP из исходного кода вручную (или, если хотите, возьмите источник соответствующего пакета и измените его, чтобы избежать конфликтов и изменить пути установки)

  • для a) Создайте отдельный набор конфигураций для apache с различными путями модулей и отдельным сценарием запуска. И, конечно, запустите его на отдельном порту.

ответ дан Mekk 28.03.2012 в 18:17
0

Если вы хотите запустить их одновременно, вам понадобятся два разных порта. Возможно, вы можете просто изменить конфигурацию apache (httpd.conf) с помощью простого сценария, который перемещает ту или иную версию в правильную позицию перед запуском apache.

    
ответ дан Martin Ueding 24.06.2011 в 14:13
0

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

Я использовал этот apraach один раз.

Ссылка

Теперь я думаю, что лучше использовать php-fpm ... но это более сложно настроить несколько версий PHP.

Нужно будет запускать множественные php-fpms и устанавливать apache для использования друг с другом.

    
ответ дан Henrique Fernandes 02.02.2013 в 23:57
0

Я написал сценарий bash, который позволяет мне легко переключаться между установленными версиями php на моем ящике. Я запускаю несколько виртуальных хостов, потому что у меня есть несколько веб-проектов с клиентами, у которых есть старые и новые программы. Некоторые из этих проектов требуют, чтобы более старые версии php и другие проекты требовали php7.0.

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

#!/bin/bash
# This file is for switching php versions.  
# To run this file you must use bash, not sh
# 
# OS: Ubuntu 14.04 but should work on any linux
# Example: bash phpswitch.sh 7.0
# Written by Daniel Pflieger
# growlingflea at g mail dot com

NEWVERSION=  #this is the git directory target

#get the active php enabled mod by getting the array of files and store
#it to a variable
VAR=$(ls /etc/apache2/mods-enabled/php*)

#parse the returned variables and get the version of php that is active.
IFS=' ' read -r -a array <<< "$VAR"
array[0]=${array[0]#*php}
array[0]=${array[0]%.conf}


#confirm that the newversion veriable isn't empty.. if it is tell user 
#current version and exit
if [ "$NEWVERSION" = "" ]; then
echo current version is ${array[0]}.  To change version please use argument
exit 1
fi 

OLDVERSION=${array[0]}
#confirm to the user this is what they want to do
echo "Update php"  ${OLDVERSION} to ${NEWVERSION}


#give the user the opportunity to use CTRL-C to exit ot just hit return
read x

#call a2dismod function: this deactivate the current php version
sudo a2dismod php${OLDVERSION}

#call the a2enmod version.  This enables the new mode
sudo a2enmod php${NEWVERSION} 

echo "Restart service??"
read x

#restart apache
sudo service apache2 restart
    
ответ дан Growling Flea 14.02.2017 в 05:30