Vraag Hoe kan ik twee versies van PHP geïnstalleerd hebben en gemakkelijk schakelen tussen deze?


Ik wil zowel PHP 5.2.17 als PHP 5.3.5 geïnstalleerd hebben op mijn Ubuntu-machine en omschakelen naar mijn eigen behoefte. Hoe kan ik dit bereiken?


71
2018-06-24 12:07


oorsprong


in ubuntu is er apache.conf in / etc / apache2, daar heb ik ook over nagedacht, misschien zal ik in de toekomst een pakket maken het zou erg handig zijn voor webontwikkelaars
U kunt dit doen met suPHP, niet zeker van de details - Marco Ceppi♦
is er iets als python virtualenv met schone geïsoleerde implementaties van PHP? - lenzai
Heb je overwogen om virtuele Ubuntu-servers in te stellen met behulp van virtualisatiesoftware die je op een headless manier gebruikt? Ik zou verbaasd zijn als wat je wilt doen, niet goed bediend wordt (door een dergelijke opzet niet bedoeld). - Simon Hoare
Bepaal wat het betekent om "gemakkelijk te schakelen". Ik gebruikte dit voor werk: mijn webserver gebruikte verschillende PHP voor .php en .php5 bestanden. Je kunt ook je WWW-server configureren om verschillende PHP-versies voor verschillende poorten te gebruiken (zoals http://localhost:80 en http://localhost:8080) of verschillende domeinen (zoals http://localphp52 en http://localphp53), waarbij alle resterende mappenstructuur intact blijft, zodat u eenvoudig één webtoepassing in twee omgevingen kunt vergelijken door de huidige URL te wijzigen. - cprn


antwoorden:


U kunt een php-versiebeheerder gebruiken om dit te bereiken. Verschillende versiebeheerders zijn beschikbaar zoals:

Mijn favoriet is phpbrew. Ik hoop dat dit helpt.


56
2018-02-03 07:32



Bedankt, kunt u instructies opnemen? (onnu vishadheekarikkamo?) - Tachyons
Hoewel dit theoretisch de vraag kan beantwoorden, het zou de voorkeur hebben om de essentiële delen van het antwoord hier op te nemen, en geef de link voor referentie. - Nanne
Controleer gewoon de links die ze hebben echt goede documentatie over hun sites. Wilt u echt dat ik dingen van hun website kopieer en plak ?. - aneeshep
Ironisch genoeg is een van de redenen om niet alleen links te plaatsen linkrot, waar deze post nu onder lijdt. - MirroredFate
@aneeshep, kopieer niet hun documentatie, maar relevante fragmenten en een paar regels over wat een "php-versie manager" is en hoe het te gebruiken / configureren voor dat specifieke probleem zou echt welkom zijn. - Matthieu


U kan voer in één keer 2 verschillende PHP-versies uit, maar het is niet zo eenvoudig als alleen apt-ze te krijgen. U moet een afzonderlijk geïnstalleerde versie uitvoeren en deze serveren volgens de instellingen in uw apache-configuratie.

Je kunt dit bijvoorbeeld doen met fastcgi: wat je eigenlijk zoekt, is de configuratie die je ziet deze pagina. U voegt een andere handler toe in uw configuratie op basis van de situatie / poort / domein die u nodig hebt. De truc, na het installeren van beide versies, is deze stap:

=== vanaf die pagina ==

  1. De laatste stap was om virtuele hosts te maken. Uiteindelijk heb ik drie bestanden in / etc / apache2 / sites-enabled: 000-default, php5.3.17 en   php5.4.7 Met de volgende inhoud

standaard:

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

Zie voor de volledige installatie de gekoppelde vraag. Vergeet ook niet om naar de twee links in de header te kijken, ze zien eruit als mooie tutorials (maar minder gecomprimeerd). Deze en Dat

(laat u niet afschrikken door het feit dat de gekoppelde vraag een grote is zonder een geaccepteerd antwoord. De methode zou (en werkt) goed werken, maar de gebruiker vergat te gebruiken <?php en gebruikt <? met shorttags uit, zie de reacties)


19
2018-02-01 10:45





Ik heb php 5.6 en 7.0 geïnstalleerd maar naast alle tips bleef het draaien 5.6, dus deze opdracht slaat de dag op (in mijn geval kies ik optie 1 en start apache opnieuw):

sudo update-alternatives --config php

11
2018-03-19 14:06





Deze werkt voor mij: https://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

Hetzelfde als het script van "Growling Flea", maar met nieuwe versies.

Voeg de PPA toe

De PHP 5.6- en PHP 7.0-pakketten zijn afkomstig van een PPA van derden, niet   geleverd door de officiële Ubuntu-repositories van Canonical. De PPA's   Ik beveel hier zijn van Ondřej Surý die PHP voor Debian pakketten   (die vervolgens wordt gebruikt door Ubuntu) dus hoewel het geen officiële is   repository, hij is niet bepaald willekeurig! De PPA zelf is    hier

Om de PPA aan uw opstelling toe te voegen:

sudo add-apt-repository ppa:ondrej/php  

Dan willen we ook informatie verzamelen over het aanbod   deze nieuwe PPA, ga dan als volgt te werk:

sudo apt-get update   

Installeer nieuwe PHP-versies

Ik had al een aantal van de php5-pakketten geïnstalleerd, maar dat deed ik niet   Alles de-installeren, ik liet het gewoon uitwerken wat het wilde doen wanneer   Ik vroeg het om de nieuwe versies te installeren:

sudo apt-get install php5.6 php7.0

Dit resulteerde in veel klagen van apt en veel conflicten.   De eerste voorgestelde resolutie was om alle voorraad php5 te verwijderen   pakketten zodat PHP 5.6 zou kunnen worden geïnstalleerd - dus ik accepteerde de   eerste suggestie.

Ik gebruik apache dus deze setup gaf me apache met zowel php5.6 als php7.0   beschikbare modules en de php5.6-module daadwerkelijk geladen.

Evenals alleen de PHP zelf, alle extensies en andere hulpmiddelen   je zou verwachten met PHP zijn er voor beide versies van PHP dus het is heel   eenvoudig toe te voegen in de modules die u nodig hebt. Ik was heel erg onder de indruk   met hoe mooi dit is gedaan.

Configureren en schakelen van versies

Nu heb je twee volledig afzonderlijke versies van PHP op je computer geïnstalleerd   systeem, dus laten we eens kijken waar alle stukjes terecht zijn gekomen!

De configuratiebestanden zijn allemaal in /etc/php/5.6 en /etc/php/7.0   respectievelijk - hierbinnen kunt u configureren welke extensies   zijn geladen, stel de ini-instellingen in en al het andere voor elke versie   in isolatie.

Ik ben een apache-gebruiker en zoals ik al zei zijn beide modules beschikbaar. Zo   om van de ene naar de andere te schakelen, moet ik doen:

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

Voor nginx-gebruikers zijn de veranderingen bijna net zo eenvoudig, Digital Ocean wel   goede documentatie hierover (ze hebben geweldige documenten!) dus check out   hun gids:    https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-php-7-on-ubuntu-14-04   omdat het een sectie bevat over het herconfigureren van nginx om een ​​andere versie te gebruiken   van PHP.

Vanaf de opdrachtregel heb ik zowel php5.6 als php7.0 beschikbaar als   commando's. Ik heb ook nog steeds een php-opdracht - kijk in / etc / alternatieven   om te zien dat het verwijst naar een bepaalde versie van PHP cli *. Jij kan   controleer ook snel welke van u gebruikt door te lopen php -v.

en meer specifiek, voer welke php uit om te zien welke versie van PHP wordt gebruikt, maar dit zal waarschijnlijk wijzen naar /usr/bin/php, wat voor   ikzelf is een symlink naar de /etc/alternatives/php opdracht.

Werken met extensies

Deze PPA wordt geleverd met het gebruikelijke php-perenpakket dat de pecl aanbiedt   commando voor beide versies van PHP, dus eventuele extensies die beschikbaar zijn   via PECL kan op de gebruikelijke manier worden geïnstalleerd. Je hebt ook de   relevante headers dus ofwel php5.6-dev of php7.0-dev zou moeten zijn   geïnstalleerd.

Wanneer de pecl-installatie is voltooid, ontvangt u een notitie om de   * .so bestand naar uw php.ini; het beste wat je hier kunt doen, is kijken naar wat erin zit /etc/php/mods-available. Er zullen er een paar zijn   modules al hier, elk in een eigen bestand genoemd naar de extensie   en eindigend op .ini. U kunt er een kopiëren om als sjabloon te gebruiken of om te maken   uw eigen en zet alle relevante configuratie voor de uitbreiding in   het (je hebt het minimaal nodig extension=[extensionName].so).

Zodra de nieuwe extensie beschikbaar is in mods, schakelt u deze in en controleert u deze   door te doen:

sudo phpenmod extension  
php -m  

Hiermee worden de symlinks op de juiste plaatsen voor uw huidige gemaakt   versie van PHP om deze module te laden, en je zou het in de lijst moeten zien   van modules uitgevoerd door de php -m. Pro tip: als je het niet ziet in de   uitvoer, scrol helemaal naar de bovenkant van de uitvoer en kijk of daar   zijn daar eventuele nuttige foutmeldingen.


5
2018-05-20 08:08





Van deze post, Ik leg gewoon de bevelen op en leg het uit in de volgorde waarin ik werd bediend (Ubuntu 12.04)

Deze methode geeft je:

  1. script met menu, die toestaan ​​om te schakelen tussen php-versies geïnstalleerd (niet beide op hetzelfde moment)

  2. verschillende PHP-versies geïnstalleerd op uw server

  3. gescheiden conf-bestanden

Installeer alle versies die u nodig hebt (ik heb er twee)

Afhankelijkheden installeren:

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

Installeer de eerste keer PHP 5.3. Download php-bronnen

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

Installeer de eerste keer PHP5.6. Download php-bronnen

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

Script manager versies PHP: Maak een bestand met de naam php.sh en stop het erin /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

Compromeer en installeer 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

Compileer en installeer 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

Laten we ze gebruiken:

$ 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
2017-08-30 11:26





Problemen:

  1. Eén apache-instantie kan niet tegelijkertijd twee verschillende PHP-versies uitvoeren (tenminste voor zover ik weet).

  2. Twee verschillende PHP-versies kunnen niet worden geïnstalleerd vanuit pakketten, omdat deze conflicteren (en proberen dezelfde mappen te overschrijven).

Oplossing:

  • voor b) Compileer "de andere" PHP-versie van de bron, handmatig (of pak desgewenst de bron van het juiste pakket en wijzig dit om conflicten te voorkomen en om installatiepaden te wijzigen)

  • voor a) Maak een aparte set van configs voor apache met verschillende modulepaden en een afzonderlijk opstartscript. En voer het natuurlijk uit op een aparte poort.


2
2018-03-28 16:17



er is geen voorverpakt script om deze multiple parallele php-instance te compileren? Gewoon om het handmatig te doen en paden aan te leggen? Dit betekent dat alle hostingbedrijven hun eigen aangepaste scripts ontwikkelen om deze parallelle versie uit te voeren en nooit hun inspanningen delen. - lenzai
Een enkele apache-instantie kan voer 2 php-versies tegelijkertijd uit. - Nanne


Als u ze tegelijkertijd wilt gebruiken, hebt u twee verschillende poorten nodig. Misschien kun je gewoon je apache config (httpd.conf) veranderen met een eenvoudig script dat een of andere versie naar de juiste positie verplaatst voordat je apache start.


0
2018-06-24 12:13



Ik heb PHP 5.3.5 al geïnstalleerd. Hoe kan ik PHP 5.2.17 installeren? Kunt u me vertellen waar en wat ik moet veranderen om in deze twee versies te schakelen? Het bestand httpd.conf is leeg in mijn installatie. - Debiprasad


U kunt ook elke website met verschillende gebruikers gebruiken. Veiliger.

Ik heb deze benadering één keer gebruikt.

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

Nu denk ik dat het beter is om php-fpm te gebruiken ... maar het is een beetje ingewikkelder om meerdere php-versies te configureren.

Moet multiple php-fpms uitvoeren en apache instellen om elkaar te gebruiken.


0
2018-02-02 22:57



Welkom bij Ask Ubuntu! Hoewel dit theoretisch de vraag kan beantwoorden, het zou de voorkeur hebben om de essentiële delen van het antwoord hier op te nemen, en geef de link voor referentie. - user98085
Ik had geen tijd genoeg om te doen wat je zei. Ik denk dat ik alleen maar een manier wilde laten zien. Stil moet leren hoe het formatterende spul te gebruiken. Toch bedankt! - Henrique Fernandes


Ik heb een bash-script geschreven waarmee ik eenvoudig kan schakelen tussen geïnstalleerde php-versies op mijn doos. Ik run verschillende virtuele hosts omdat ik verschillende webprojecten heb met klanten die oude en nieuwe programma's hebben. Sommige van deze projecten vereisen oudere versies van php en andere projecten vereisen php7.0.

Lees mijn opmerkingen door en zorg ervoor dat u begrijpt wat er aan de hand is voordat u dit gebruikt.

#!/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
2018-02-14 04:30





In plaats van meerdere te maken VirtualHost Ik voeg gewoon de onderstaande code toe in mijn .htaccess bestand en verrassend werkte het,

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

Knooppunt: ik was al geïnstalleerd php7.2-fpm voor het gebruik van de code.


0
2018-05-25 11:59





Ik had hetzelfde probleem toen ik meerdere projecten afhandelde. Ik heb doorverwezen Dit artikel  Maar het was alsof elke keer dat ik nodig had om de versies te wisselen indien nodig, maar dit geeft de flexibiliteit voor cli en web afzonderlijk.

Verhuizen van php5.6 naar php7.0 

Voor Apache kunnen we het commando gebruiken als:

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

Voor CLI kunnen we het commando gebruiken als:

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

Verhuizen van php7.0 naar php5.6 

Voor Apache kunnen we het commando gebruiken als:

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

Voor CLI kunnen we het commando gebruiken als:

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

0
2018-05-28 20:31



Hoewel deze link mogelijk een antwoord op de vraag is, is het beter om de essentiële delen van het antwoord hier op te nemen en de link ter referentie aan te bieden. Link-alleen antwoorden kunnen ongeldig worden als de gekoppelde pagina verandert. - Van beoordeling - waltinator
@waltinator Bedankt voor de beoordeling, dit zal zeker gebeuren - Shivdhwaj Pandey