it-swarm-eu.dev

Jak nainstalovat dvě verze PHP a snadno mezi nimi přepínat)?

Chci mít na svém stroji Ubuntu nainstalované obě verze PHP 5.2.17 a PHP 5.3.3) a podle potřeby přepínat. Jak toho mohu dosáhnout?

76
Debiprasad

K dosažení tohoto cíle můžete použít správce verzí php. K dispozici jsou různí správci verzí jako:

Můj oblíbený je phpbrew. Snad to pomůže.

61
aneeshep

Vy můžete spustit 2 různé PHP verze najednou, ale není to tak snadné, jak je jednoduše získat). musíte spustit jednu samostatně nainstalovanou verzi a obsluhovat ji podle nastavení ve vaší konfiguraci Apache.

Můžete to udělat například pomocí fastcgi: v podstatě to, co hledáte, je konfigurace, kterou vidíte na tato stránka . Do své konfigurace přidáte jiný obslužný program na základě situace/portu/domény, kterou potřebujete. Trik po instalaci obou verzí je tento krok:

=== z této stránky ==

  1. Posledním krokem bylo vytvoření virtuálních hostitelů. Nakonec mám tři soubory v/etc/Apache2/sites-enabled: 000-default, php5.3.17 a php5.4.7 S následujícím obsahem

výchozí:

    <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>

Podívejte se na kompletní instalaci související otázka . Nezapomeňte se také podívat na dva odkazy v záhlaví, vypadají jako pěkné výukové programy (ale méně komprimované). Toto a To

(Nenechte se zmást tím, že propojená otázka je velká bez přijaté odpovědi. Metoda by měla (a funguje) dobře, ale uživatel zapomněl použít <?php a použité <? se zkratkami, viz komentáře)

20
Nanne

Nainstaloval jsem php 5.6 a 7.0, ale kromě všech tipů, které stále fungoval 5.6, tak tento příkaz uloží den (v mém případě si vyberu možnost 1 a restartuji Apache):

Sudo update-alternatives --config php
13
Marcelo Ágil

Tenhle pracuje pro mě: https://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubunt

Stejné jako skript z "Growling Flea", ale s použitím nových verzí.

Přidejte PPA

Balíčky PHP 5,6 a PHP 7,0) pocházejí od PPA třetích stran, nejsou poskytovány oficiálními úložišti Ubuntu od Canonical. PPA, které zde doporučuji, jsou od Ondřeje Surého, který balíčky PHP pro Debian (který je pak používán Ubuntu)), ačkoli to není oficiální repozitář, není úplně náhodný! Samotná PPA je zde

Přidání PPA do vašeho nastavení:

Sudo add-apt-repository ppa:ondrej/php  

Pak budeme chtít také získat informace o tom, co je v nabídce této nové PPA, a pak spustit:

Sudo apt-get update   

Nainstalovat nové PHP verze

Už jsem měl nainstalované některé balíčky php5, ale nic jsem neodinstaloval, nechal jsem apt vymyslet, co chce dělat, když jsem ho požádal o instalaci nových verzí:

Sudo apt-get install php5.6 php7.0

Výsledkem bylo mnoho stížností na apt a spousta konfliktů. Prvním navrženým řešením bylo odstranit všechny balíčky php5 akcií, aby bylo možné nainstalovat PHP= 5,6) - tak jsem právě přijal první návrh.

Používám Apache, takže toto nastavení mi poskytlo Apache s dostupnými moduly php5.6 a php7.0 a modul php5.6 skutečně načten.

Stejně jako samotný PHP), všechna rozšíření a další nástroje, které byste očekávali s PHP, jsou k dispozici pro obě verze PHP, takže je velmi snadné přidat moduly, které potřebujete. Byl jsem velmi, velmi ohromen tím, jak pěkně se to dělá.

Konfigurace a přepínání verzí

Nyní máte ve vašem systému nainstalované dvě zcela oddělené verze PHP ============), takže se podívejme, kam všechny kusy šly!

Všechny konfigurační soubory jsou v /etc/php/5.6 a /etc/php/7.0 příslušně - uvnitř zde můžete konfigurovat, která rozšíření jsou načtena, nastavit nastavení ini a všechno ostatní pro každou verzi izolovaně.

Jsem uživatel Apache a jak jsem zmínil, oba moduly jsou k dispozici. Abych mohl přejít z jednoho na druhého, musím udělat:

Sudo a2dismod php5.6
Sudo a2enmod php7.0
Sudo service Apache2 restart

Pro uživatele nginx jsou změny téměř stejně snadné, Digitální oceán má o tom dobrou dokumentaci (mají skvělé dokumenty!), Takže si přečtěte jejich průvodce: https://www.digitalocean.com/community/tutorials/ how-to-upgrade-to-php-7-on-ubuntu-14-04 , protože obsahuje oddíl o změně konfigurace nginx pro použití jiné verze PHP.

Z příkazového řádku mám k dispozici jako příkazy php5.6 a php7.0. Stále mám také příkaz php - podívejte se do/etc/alternatives a zjistěte, že se symlinks na konkrétní verzi PHP cli *.) Můžete také rychle zkontrolovat, které vaše používá, spuštěním php -v.

* konkrétněji, spusťte, který php, abyste viděli, která verze PHP je používána - ale pravděpodobně to ukáže na /usr/bin/php, což je pro mě samé symbolickým odkazem na /etc/alternatives/php příkaz.

Práce s rozšířeními

Tato PPA přichází s obvyklým balíčkem php-pear, který nabízí příkaz pecl pro obě verze PHP, takže jakákoli rozšíření, která jsou k dispozici prostřednictvím PECL, lze nainstalovat obvyklým způsobem. Budete také potřebovat příslušná záhlaví, takže by měl být nainstalován buď php5.6-dev nebo php7.0-dev.

Po dokončení instalace pecl se zobrazí poznámka k přidání souboru * .so do vašeho php.ini; ve skutečnosti to nejlepší, co tady udělat, je podívat se na to, co je v /etc/php/mods-available. Budou zde již nějaké moduly, každý ve svém vlastním souboru pojmenovaném po rozšíření a končící na .ini. Můžete kopírovat jednu, kterou chcete použít jako šablonu, nebo si vytvořit vlastní a vložit do ní veškerou relevantní konfiguraci pro rozšíření (minimálně musíte extension=[extensionName].so).

Jakmile bude nové rozšíření dostupné v režimech, povolte a poté jej zkontrolujte provedením:

Sudo phpenmod extension  
php -m  

Tím vytvoříte odkazy na správných místech pro vaši aktuální verzi PHP pro načtení tohoto modulu) a měli byste ji vidět v seznamu výstupů modulů pomocí php -m. Tip pro profesionály: pokud jej ve výstupu nevidíte, posuňte se až na vrchol výstupu a podívejte se, zda tam nejsou nějaké užitečné chybové zprávy.

6
Daniel Pineda

Z tohoto příspěvk , právě jsem dal příkazy a vysvětlil je v pořadí, jak mi byly doručeny (Ubuntu 12.04)

Tato metoda vám poskytne:

  1. skript s nabídkou, který umožňuje přepínání mezi nainstalovanými verzemi php (ne obě současně)

  2. různé PHP verze nainstalované na vašem serveru

  3. oddělené soubory conf

Nainstalujte všechny potřebné verze (mám dvě)

Instalace závislostí:

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

Nainstalujte PHP 5.3 poprvé. Stáhněte si zdroje 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

Nainstalujte PHP5.6 poprvé. Stáhněte si php zdroje

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

Verze správce skriptů PHP: Vytvořte soubor s názvem php.sh a vložte jej do /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

Kompilace a instalace 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

Kompilace a instalace 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

Pojďme je použít:

$ 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
3
PegasusOnlin

Problémy:

  1. Samostatná instance Apache nemůže běžet dvě různé verze PHP verze současně) (alespoň pokud je mi známo).

  2. Dvě různé verze PHP nelze nainstalovat z balíčků, protože tyto budou v konfliktu (a zkuste přepsat stejné adresáře).

Řešení:

  • for b) Kompilujte „the other“ PHP verze ze zdroje, ručně (nebo pokud dáváte přednost, uchopte zdroj vhodného balíčku a upravte jej, aby se zabránilo konfliktům a upravoval instalační cesty))

  • pro a) Vytvořte samostatnou sadu konfigurací pro Apache s různými cestami modulů a samostatným spouštěcím skriptem. A samozřejmě spustit na samostatném portu.

2
Mekk

Namísto vytváření více VirtualHost jen přidám níže uvedený kód do svého .htaccess soubor a překvapivě to fungovalo,

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>

zel: Už jsem nainstaloval php7.2-fpm před použitím kódu.

1
Rohan Kumar

To lze provést deaktivací a povolením nové verze PHP-

  • přepnout na starší verzi -
    a2dismod php7.0
    restartování služby Apache2
  • přepněte na novější verzi
    a2enmod php7.0
    restartování služby Apache2
0
Vikas Chauhan

Každý web můžete také provozovat s různými uživateli. Více zabezpečeno.

Použil jsem tento přístup jednou.

http://blog.servergrove.com/2011/08/22/how-to-setup-multiple-php-versions-on-Apache/

Teď si myslím, že je lepší používat php-fpm ... ale je trochu složitější konfigurovat více verzí php.

Bude muset spustit násobky php-fpms a nastavit Apache, aby se navzájem používaly.

0

Pokud je chcete spustit současně, potřebujete dva různé porty. Možná můžete jednoduše změnit konfiguraci Apache (httpd.conf) pomocí jednoduchého skriptu, který před spuštěním Apache přesune jednu nebo druhou verzi na správnou pozici.

0
Martin Ueding

Měl jsem stejný problém, když jsem řešil více projektů. Odkázal jsem tento článek Ale bylo to jako pokaždé, když potřebuji přepínat verze, pokud to bude potřeba, ale to dává flexibilitu pro Cli a web samostatně.

Přechod z php5.6 na php7.0

Pro Apache můžeme příkaz použít jako:

Sudo a2dismod php5.6 ; Sudo a2enmod php7.0 ; Sudo service Apache2 restart

Pro CLI můžeme příkaz použít jako:

Sudo update-alternatives --set php /usr/bin/php7.0

Přechod z php7.0 na php5.6

Pro Apache můžeme příkaz použít jako:

Sudo a2dismod php7.0 ; Sudo a2enmod php5.6 ; Sudo service Apache2 restart

Pro CLI můžeme příkaz použít jako:

Sudo update-alternatives --set php /usr/bin/php5.6
0
Shivdhwaj Pandey

Napsal jsem bash skript, který mi umožňuje snadno přepínat mezi nainstalovanými verzemi php v mém okně. Provozuji několik virtuálních hostitelů, protože mám několik webových projektů se zákazníky, kteří mají staré a nové programy. Některé z těchto projektů vyžadují starší verze php a jiné projekty vyžadují php7.0.

Před použitím tohoto komentáře si přečtěte moje komentáře a ujistěte se, že rozumíte tomu, co se děje.

#!/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=$1  #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
0
Growling Flea