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?
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?
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 ==
- 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
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)
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
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 diextension=[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ì.
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:
script con menu, che consente il passaggio tra le versioni di php installate (non entrambe allo stesso tempo)
varie versioni di PHP installate sul tuo server
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
I problemi:
Un'istanza apache singola non può eseguire contemporaneamente due versioni PHP diverse (almeno per quanto ne so).
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.
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.
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.
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
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.
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