Comment installer deux versions de PHP et les basculer facilement?

70

Je souhaite que PHP 5.2.17 et PHP 5.3.5 soient tous deux installés sur ma machine et mon commutateur Ubuntu selon mes besoins. Comment puis-je atteindre cet objectif?

    
posée Debiprasad 24.06.2011 - 14:07
la source

11 réponses

54

Vous pouvez utiliser un gestionnaire de version php pour y parvenir. Différents gestionnaires de versions sont disponibles, tels que:

Mon préféré est le phpbrew. J'espère que ça aide.

    
réponse donnée aneeshep 03.02.2013 - 08:32
la source
18

Vous pouvez exécuter deux versions de PHP différentes en même temps, mais ce n’est pas aussi simple que de les obtenir. Vous devez exécuter une version installée séparément et la servir conformément aux paramètres de votre configuration apache.

Vous pouvez le faire en utilisant fastcgi par exemple: fondamentalement, ce que vous recherchez est la configuration que vous voyez sur cette page . Vous ajoutez un gestionnaire différent dans votre configuration en fonction de la situation / du port / du domaine dont vous avez besoin. L'astuce, après l'installation des deux versions, est la suivante:

=== à partir de cette page ==

  
  1. La dernière étape consistait à créer des hôtes virtuels. Au final, j'ai trois fichiers dans / etc / apache2 / sites-enabled: 000-default, php5.3.17 et   php5.4.7 Avec le contenu suivant
  2.   

par défaut:

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

Pour l’installation complète, la question liée . N'oubliez pas de regarder les deux liens dans l'en-tête également, ils ressemblent à de bons tutoriels (mais moins compressés). Cela et Que

(ne soyez pas mis par le fait que la question liée est une question importante sans réponse acceptée. La méthode devrait (et fonctionne) bien, mais l'utilisateur a oublié d'utiliser <?php et a utilisé <? avec des raccourcis, voir les commentaires)

    
réponse donnée Nanne 01.02.2013 - 11:45
la source
11

J'ai installé php 5.6 et 7.0, mais en plus de tous les conseils qu’il continuait à utiliser 5.6, cette commande enregistre le jour (dans mon cas, j’ai choisi l’option 1 et redémarre apache):

sudo update-alternatives --config php
    
réponse donnée Marcelo Ágil 19.03.2017 - 15:06
la source
5

Celui-ci fonctionne pour moi: lien

Identique au script de "Growling Flea", mais utilisant de nouvelles versions.

  

Ajouter le PPA

     

Les paquets PHP 5.6 et PHP 7.0 proviennent d’un tiers PPA, pas   fourni par les dépôts officiels Ubuntu de Canonical. Les AAE   Je recommande ici de Ondřej Surý qui compresse PHP pour Debian   (qui est alors utilisé par Ubuntu) alors qu'il n'est pas un fonctionnaire   dépôt, il n'est pas exactement aléatoire! Le PPA lui-même est    ici

     

Pour ajouter le PPA à votre configuration:

sudo add-apt-repository ppa:ondrej/php  
     

Ensuite, nous voudrons également obtenir des informations sur ce qui est proposé par   ce nouveau PPA, alors lancez:

sudo apt-get update   
     

Installer les nouvelles versions de PHP

     

J'avais déjà installé certains des paquets php5, mais je ne les avais pas   désinstaller quoi que ce soit, je viens de laisser apt travailler sur ce qu'il voulait faire quand   Je lui ai demandé d'installer les nouvelles versions:

sudo apt-get install php5.6 php7.0
     

Cela a entraîné beaucoup de plaintes d'Apt et de nombreux conflits.   La première résolution suggérée était de supprimer tout le stock php5   paquets afin que PHP 5.6 puisse être installé - alors je viens d'accepter le   première suggestion.

     

J'utilise Apache donc cette configuration m'a donné apache avec php5.6 et php7.0   modules disponibles et le module php5.6 réellement chargé.

     

Ainsi que le PHP lui-même, toutes les extensions et autres outils   vous attendez avec PHP sont là pour les deux versions de PHP, donc c'est très   facile à ajouter dans les modules dont vous avez besoin. J'étais très, très impressionné   avec comment bien c'est fait.

     

Configurer et changer de version

     

Maintenant, vous avez deux versions de PHP complètement séparées installées sur votre   système, alors regardons où toutes les pièces sont allées!

     

Les fichiers de configuration sont tous en /etc/php/5.6 et /etc/php/7.0   respectivement - ici, vous pouvez configurer quelles extensions   sont chargés, définissez les paramètres ini et tout le reste pour chaque version   en vase clos.

     

Je suis un utilisateur Apache, et comme je l'ai mentionné, les deux modules sont disponibles. Alors   pour passer de l'un à l'autre, je dois faire:

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

Pour les utilisateurs de nginx, les changements sont presque aussi faciles, Digital Ocean a   bonne documentation à ce sujet (ils ont d'excellents documents!)   leur guide:    lien   comme il comprend une section sur la reconfiguration de nginx pour utiliser une autre version   de PHP.

     

A partir de la ligne de commande, php5.6 et php7.0 sont disponibles en tant que   commandes. J'ai aussi toujours une commande php - regardez dans / etc / alternatives   pour voir qu'il est lié à une version particulière de PHP cli *. Vous pouvez   Vérifiez également rapidement ce que vous utilisez en exécutant php -v .

     

& amp; ast; plus précisément, exécutez php pour voir quelle version de PHP est utilisée - mais cela indiquera probablement /usr/bin/php , ce qui pour   moi-même est un lien symbolique vers la commande /etc/alternatives/php .

     

Travailler avec des extensions

     

Ce PPA est livré avec le paquet php-pear habituel qui offre le pecl   commande pour les deux versions de PHP, donc toutes les extensions disponibles   via PECL peut être installé de la manière habituelle. Vous aurez également besoin du   les en-têtes pertinents de sorte que php5.6-dev ou php7.0-dev devraient être   installé.

     

Lorsque l'installation de pecl est terminée, vous obtenez une note pour ajouter le   * .so fichier à votre php.ini; En fait, la meilleure chose à faire ici est de regarder ce qui est en /etc/php/mods-available . Il y en aura   modules déjà ici, chacun dans son propre fichier nommé après l'extension   et se terminant par .ini. Vous pouvez en copier un pour l'utiliser comme modèle ou créer   votre propre et mettre toutes les configurations pertinentes pour l'extension dans   ça (au minimum, vous avez besoin de extension=[extensionName].so ).

     

Une fois que la nouvelle extension est dans les mods disponibles, activez-la et vérifiez-la   en faisant:

sudo phpenmod extension  
php -m  
     

Cela va créer les liens symboliques aux bons endroits pour votre courant   version de PHP pour charger ce module, et vous devriez le voir dans la liste   des modules émis par le php -m . Astuce Pro: si vous ne le voyez pas dans le   sortie, faites défiler tout en haut de la sortie et voir si   y a-t-il des messages d'erreur utiles?

    
réponse donnée Daniel Pineda 20.05.2017 - 10:08
la source
3

À partir de cet article , Je viens de mettre en ordre les commandes et d’expliquer dans l’ordre où je suis servi (Ubuntu 12.04)

Cette méthode vous donne:

  1. script avec menu permettant de basculer entre les versions php installées (pas les deux en même temps)

  2. diverses versions de PHP installées sur votre serveur

  3. fichiers de configuration séparés

Installez toutes les versions dont vous avez besoin (j'en ai deux)

Installer les dépendances:

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

Installez PHP 5.3 pour la première fois. Télécharger les sources 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

Installez PHP5.6 pour la première fois. Télécharger les sources 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

Versions du gestionnaire de scripts PHP: créez un fichier appelé php.sh et placez-le dans /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

Compilez et installez 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

Compilez et installez 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

Utilisons-les:

$ 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
    
réponse donnée PegasusOnlin 30.08.2016 - 13:26
la source
2

Problèmes:

  1. Une seule instance d'Apache ne peut pas exécuter deux versions de PHP différentes simultanément (du moins pour autant que je le sache).

  2. Deux versions de PHP différentes ne peuvent pas être installées à partir de packages car elles entreraient en conflit (et remplaceraient les mêmes répertoires).

Solution:

  • pour b) Compilez "l'autre" version PHP de la source, manuellement (ou si vous préférez, récupérez la source du paquet approprié et modifiez-la pour éviter les conflits et modifier les chemins d'installation)

  • pour a) Créez un ensemble distinct de configuration pour apache avec différents chemins de module et un script de démarrage distinct. Et bien sûr, lancez-le sur un port séparé.

réponse donnée Mekk 28.03.2012 - 18:17
la source
0

Si vous souhaitez les exécuter simultanément, vous avez besoin de deux ports différents. Peut-être que vous pouvez simplement changer votre config apache (httpd.conf) avec un script simple qui déplace une ou plusieurs versions dans la bonne position avant de lancer apache.

    
réponse donnée Martin Ueding 24.06.2011 - 14:13
la source
0

Vous pouvez également exécuter chaque site Web avec des utilisateurs différents. Plus sécurisé.

J'ai utilisé cette approche une fois.

lien

Maintenant, je pense qu'il est préférable d'utiliser php-fpm ... mais il est un peu plus compliqué de configurer plusieurs versions de php.

Il faudra lancer plusieurs php-fpms et définir apache pour s’utiliser mutuellement.

    
réponse donnée Henrique Fernandes 02.02.2013 - 23:57
la source
0

J'ai écrit un script bash qui me permet de basculer facilement entre les versions php installées sur ma boîte. J'exécute plusieurs hôtes virtuels car j'ai plusieurs projets Web avec des clients qui ont d'anciens et nouveaux programmes. Certains de ces projets nécessitent des versions plus anciennes de php et d'autres projets nécessitent php7.0.

Lisez mes commentaires et assurez-vous de bien comprendre ce qui se passe avant de l'utiliser.

#!/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
    
réponse donnée Growling Flea 14.02.2017 - 05:30
la source
0

Au lieu de créer plusieurs VirtualHost , j'ajoute simplement le code ci-dessous dans mon fichier .htaccess et, étonnamment, cela a fonctionné,

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

Noeud: j'avais déjà installé php7.2-fpm avant d’utiliser le code.

    
réponse donnée Rohan Kumar 25.05.2018 - 13:59
la source
0

J'ai eu le même problème lorsque je gérais plusieurs projets. J'ai mentionné cet article  Mais c'était comme chaque fois que je devais changer de version si besoin, mais cela donne la flexibilité pour cli et web séparément.

Passer de php5.6 à php7.0

Pour Apache, nous pouvons utiliser la commande en tant que:

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

Pour CLI, nous pouvons utiliser la commande en tant que:

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

Passer de php7.0 à php5.6

Pour Apache, nous pouvons utiliser la commande en tant que:

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

Pour CLI, nous pouvons utiliser la commande en tant que:

sudo update-alternatives --set php /usr/bin/php5.6
    
réponse donnée Shivdhwaj Pandey 28.05.2018 - 22:31
la source

Lire d'autres questions sur les étiquettes