Come avere due versioni di PHP installate e passare facilmente da una all'altra?

71

Voglio avere sia PHP 5.2.17 che PHP 5.3.5 installati sulla mia macchina Ubuntu e passare secondo le mie necessità. Come posso raggiungere questo obiettivo?

    
posta Debiprasad 24.06.2011 - 14:07

11 risposte

55

Puoi utilizzare un gestore di versione php per raggiungere questo obiettivo. Diversi gestori di versioni sono disponibili come:

Il mio preferito è phpbrew. Spero che questo aiuti.

    
risposta data aneeshep 03.02.2013 - 08:32
18

Puoi poter eseguire 2 diverse versioni di PHP contemporaneamente, ma non è così facile come ottenerle. È necessario eseguire una versione installata separatamente e servirla secondo le impostazioni della propria configurazione di apache.

Puoi farlo usando ad esempio fastcgi: in pratica quello che stai cercando è la configurazione che vedi su questa pagina . Aggiungi un gestore diverso nella tua configurazione in base alla situazione / porta / dominio di cui hai bisogno. Il trucco, dopo aver installato entrambe le versioni, è questo passo:

=== da quella pagina ==

  
  1. L'ultimo passo era creare host virtuali. Alla fine ho tre file in / etc / apache2 / sites-enabled: 000-default, php5.3.17 e   php5.4.7 Con i seguenti contenuti
  2.   

di default:

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

Vedi per l'installazione completa la domanda collegata . Non dimenticare di guardare anche i due link nell'intestazione, sembrano semplici tutorial (ma meno compressi). Questo e That

(non fatevi ingannare dal fatto che la domanda collegata è grande senza risposta accettata. Il metodo dovrebbe (e funziona) funzionare bene, ma l'utente ha dimenticato di usare <?php e ha usato <? con i tag disattivati, vedere i commenti)

    
risposta data Nanne 01.02.2013 - 11:45
11

Ho installato php 5.6 e 7.0 ma oltre a tutti i suggerimenti continuava a funzionare 5.6, quindi questo comando salva il giorno (nel mio caso ho chosse l'opzione 1 e riavvio apache):

sudo update-alternatives --config php
    
risposta data Marcelo Ágil 19.03.2017 - 15:06
5

Questo funziona per me: link

Come lo script di "Growling Flea", ma utilizzando nuove versioni.

  

Aggiungi il PPA

     

I pacchetti PHP 5.6 e PHP 7.0 provengono da un PPA di terze parti, non   fornito dai repository ufficiali di Ubuntu da Canonical. I PPA   Sto raccomandando qui da Ondřej Surý che pacchetti PHP per Debian   (che viene poi utilizzato da Ubuntu) quindi, anche se non è un funzionario   repository, non è esattamente casuale! Lo stesso PPA è    qui

     

Per aggiungere il PPA alla configurazione:

sudo add-apt-repository ppa:ondrej/php  
     

Quindi vorremmo anche ottenere informazioni su ciò che è in offerta da   questo nuovo PPA, quindi esegui:

sudo apt-get update   
     

Installa nuove versioni di PHP

     

Ho già installato alcuni dei pacchetti php5, ma non l'ho fatto   disinstallare qualsiasi cosa, ho appena lasciato apt per capire cosa voleva fare quando   Ho chiesto di installare le nuove versioni:

sudo apt-get install php5.6 php7.0
     

Ciò ha provocato molte lamentele da parte di apt e molti conflitti.   La prima soluzione suggerita era quella di rimuovere tutto lo stock php5   pacchetti in modo che PHP 5.6 possa essere installato - quindi ho appena accettato il   primo suggerimento.

     

Uso Apache quindi questa configurazione mi ha dato apache con php5.6 e php7.0   moduli disponibili e il modulo php5.6 effettivamente caricato.

     

Oltre al solo PHP, a tutte le estensioni e altri strumenti   ti aspetteresti che con PHP ci sia per entrambe le versioni di PHP, quindi è molto   facile da aggiungere nei moduli di cui hai bisogno. Sono rimasto molto, molto colpito   con quanto è fatto bene.

     

Configurazione e passaggio versioni

     

Ora hai due versioni di PHP completamente separate installate sul tuo   sistema, quindi diamo un'occhiata a dove sono andati tutti i pezzi!

     

I file di configurazione sono tutti in /etc/php/5.6 e /etc/php/7.0   rispettivamente - all'interno qui è dove puoi configurare quali estensioni   sono caricati, imposta le impostazioni ini e tutto il resto per ogni versione   in isolamento.

     

Sono un utente apache e, come ho detto, entrambi i moduli sono disponibili. Così   per passare da uno all'altro ho bisogno di fare:

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

Per gli utenti di nginx, i cambiamenti sono quasi altrettanto facili, come quelli di Digital Ocean   buona documentazione su questo (hanno ottimi documenti!) quindi check out   la loro guida:    link   in quanto include una sezione sulla riconfigurazione di nginx per utilizzare un'altra versione   di PHP.

     

Dalla riga di comando, ho sia php5.6 che php7.0 disponibili come   comandi. Ho anche ancora un comando php - guarda in / etc / alternative   per vedere che si collega ad una versione particolare di PHP cli *. Puoi   controlla anche rapidamente il tuo utilizzo eseguendo php -v .

     

& amp; ast; più precisamente, esegui php per vedere quale versione di PHP viene utilizzata, ma probabilmente questo indicherà /usr/bin/php , che per   me stesso è un link simbolico al comando /etc/alternatives/php .

     

Operazioni con le estensioni

     

Questo PPA viene fornito con il solito pacchetto php-pera che offre il pecl   comando per entrambe le versioni di PHP, quindi eventuali estensioni disponibili   via PECL può essere installato nel solito modo. Avrai anche bisogno del   intestazioni rilevanti in modo che sia php5.6-dev o php7.0-dev   installato.

     

Quando l'installazione pecl completa, riceverai una nota per aggiungere il   * .so file sul tuo php.ini; in effetti la cosa migliore da fare qui è guardare cosa c'è in /etc/php/mods-available . Ce ne saranno alcuni   moduli già qui, ciascuno nel proprio file chiamato dopo l'estensione   e termina in .ini. Puoi copiarne uno da usare come modello o creare   il tuo e mettere tutta la configurazione pertinente per l'estensione in   (come minimo, hai bisogno di extension=[extensionName].so ).

     

Una volta che la nuova estensione è disponibile in mod, abilitala e poi controllala   facendo:

sudo phpenmod extension  
php -m  
     

Questo creerà i link simbolici nei posti giusti per il tuo attuale   versione di PHP per caricare questo modulo, e dovresti vederlo nella lista   dei moduli emessi dal php -m . Suggerimento: se non lo vedi nel   uscita, scorrere fino alla cima dell'output e vedere se lì   ci sono messaggi di errore utili lì.

    
risposta data Daniel Pineda 20.05.2017 - 10:08
3

Da questo post , Ho appena messo in ordine i comandi e spiegato in ordine come mi è stato servito (Ubuntu 12.04)

Questo metodo ti offre:

  1. script con menu, che consente il passaggio tra le versioni di php installate (non entrambe allo stesso tempo)

  2. varie versioni di PHP installate sul tuo server

  3. file conf separati

Installa tutte le versioni di cui hai bisogno (ne ho due)

Installa dipendenze:

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

Installa PHP 5.3 la prima volta. Scarica sorgenti 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

Installa PHP5.6 la prima volta. Scarica sorgenti 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

Versioni dello script manager PHP: crea un file chiamato php.sh e inseriscilo in /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

Compila e installa 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

Compila e installa 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

Usiamoli:

$ 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
    
risposta data PegasusOnlin 30.08.2016 - 13:26
2

I problemi:

  1. Un'istanza apache singola non può eseguire contemporaneamente due versioni PHP diverse (almeno per quanto ne so).

  2. Non è possibile installare due diverse versioni di PHP dai pacchetti in quanto tali saranno in conflitto (e provare a sovrascrivere le stesse directory).

Soluzione:

  • per b) Compilare "l'altra" versione PHP dal sorgente, manualmente (o se si preferisce, prendere l'origine del pacchetto appropriato e modificarlo per evitare conflitti e modificare i percorsi di installazione)

  • per a) Creare un set separato di configurazioni per apache con percorsi di moduli diversi e script di avvio separati. E ovviamente eseguilo su una porta separata.

risposta data Mekk 28.03.2012 - 18:17
0

Se vuoi eseguirli allo stesso tempo, hai bisogno di due porte diverse. Forse puoi semplicemente modificare la tua configurazione di apache (httpd.conf) con un semplice script che sposta l'una o l'altra versione nella posizione corretta prima di avviare apache.

    
risposta data Martin Ueding 24.06.2011 - 14:13
0

Puoi anche eseguire ogni sito Web con utenti di diferentes. Più sicuro.

Ho usato questo approccio una volta.

link

Ora penso che sia meglio usare php-fpm ... ma è un po 'più complicato configurare più versioni di php.

Dovrà eseguire multipli php-fpms e impostare apache per utilizzarsi l'un l'altro.

    
risposta data Henrique Fernandes 02.02.2013 - 23:57
0

Ho scritto uno script bash che mi consente di passare facilmente da una versione di php installata alla mia casella. Gestisco diversi host virtuali perché ho diversi progetti web con clienti che hanno programmi vecchi e nuovi. Alcuni di questi progetti richiedono versioni precedenti di php e altri progetti che richiedono php7.0.

Leggi i miei commenti e assicurati di capire cosa sta succedendo prima di utilizzarlo.

#!/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
    
risposta data Growling Flea 14.02.2017 - 05:30
0

Invece di creare più VirtualHost , aggiungo il codice seguente nel mio file .htaccess e sorprendentemente ha funzionato,

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

Nodo: avevo già installato php7.2-fpm prima di usare il codice.

    
risposta data Rohan Kumar 25.05.2018 - 13:59
0

Ho avuto lo stesso problema quando gestivo più progetti. Ho fatto riferimento a questo articolo  Ma era come ogni volta che ho bisogno di cambiare le versioni se necessario, ma questo offre la flessibilità per cli e web separatamente.

Passaggio da php5.6 a php7.0

Per Apache, possiamo usare il comando come:

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

Per CLI, possiamo usare il comando come:

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

Passaggio da php7.0 a php5.6

Per Apache, possiamo usare il comando come:

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

Per CLI, possiamo usare il comando come:

sudo update-alternatives --set php /usr/bin/php5.6
    
risposta data Shivdhwaj Pandey 28.05.2018 - 22:31

Leggi altre domande sui tag