Question Comment avoir deux versions de PHP installées et passer facilement entre elles?


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


71
2018-06-24 12:07


origine


dans ubuntu il y a apache.conf dans / etc / apache2, j'y ai pensé aussi, peut-être que dans le futur je ferais un paquet très utile pour les développeurs web
Vous pouvez le faire avec suPHP, pas sûr que les détails - Marco Ceppi♦
Y at-il quelque chose comme python virtualenv pour avoir des déploiements de PHP isolés? - lenzai
Avez-vous envisagé de mettre en place des serveurs Ubuntu virtuels en utilisant un logiciel de virtualisation que vous utilisez sans la tête? Je serais surpris si ce que vous voulez faire n'est pas bien servi (sans jeu de mots) par une telle configuration. - Simon Hoare
Définir ce que signifie "basculer facilement". Je l'ai utilisé pour le travail: mon serveur Web utilisait un code PHP différent pour .php et .php5 des dossiers. Vous pouvez également configurer votre serveur WWW pour utiliser différentes versions de PHP pour différents ports (comme http://localhost:80 et http://localhost:8080) ou différents domaines (comme http://localphp52 et http://localphp53) en laissant toutes les structures de dossiers restantes intactes, vous pouvez facilement comparer l’exécution d’une application Web dans deux environnements en modifiant l’URL actuelle. - cprn


Réponses:


Vous pouvez utiliser un gestionnaire de version php pour y parvenir. Différents gestionnaires de version sont disponibles comme:

Mon préféré est le phpbrew. J'espère que cela t'aides.


56
2018-02-03 07:32



Merci, pouvez-vous s'il vous plaît inclure des instructions? (onnu vishadheekarikkamo?) - Tachyons
Bien que cela puisse théoriquement répondre à la question, ce serait préférable inclure les parties essentielles de la réponse ici, et fournir le lien pour référence. - Nanne
Il suffit de vérifier les liens qu'ils ont vraiment une bonne documentation sur leurs sites. Voulez-vous vraiment que je recopie les éléments de leur site Web? - aneeshep
Ironiquement, linkrot est l'une des raisons pour lesquelles il ne suffit pas de publier des liens. - MirroredFate
@aneeshep, pas copier-coller leur documentation, mais des extraits pertinents et quelques lignes sur ce qu'est un "gestionnaire de version php" et comment l'utiliser / le configurer pour ce problème spécifique seraient vraiment les bienvenus. - Matthieu


Toi pouvez lancez 2 versions de PHP différentes à la fois, 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

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>

Voir 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). Ce et Cette

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


19
2018-02-01 10:45





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, je choisis l'option 1 et redémarre apache):

sudo update-alternatives --config php

11
2018-03-19 14:06





Celui-ci travaille pour moi: https://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

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 PPA tiers, et non   fourni par les dépôts officiels Ubuntu de Canonical. Les AAE   Je recommande ici de Ondřej Surý qui emballe PHP pour Debian   (qui est alors utilisé par Ubuntu) alors que ce n'est pas un officiel   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 souhaitons également obtenir des informations sur ce qui est proposé par   cette nouvelle PPA, alors lancez:

sudo apt-get update   

Installer de nouvelles versions de PHP

J'ai déjà installé certains paquets php5, mais je ne l'ai pas fait   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 de la part 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é.

En plus du PHP lui-même, de 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 dans /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 isolation.

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:    https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-php-7-on-ubuntu-14-04   comme il comprend une section sur la reconfiguration de nginx pour utiliser une autre version   de PHP.

Depuis 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   également vérifier rapidement ce que vous utilisez en cours d'exécution php -v.

& ast plus précisément, exécutez php pour voir quelle version de PHP est utilisée - mais cela vous indiquera probablement /usr/bin/phpqui pour   moi est lui-même un lien symbolique vers le /etc/alternatives/php commander.

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ée.

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 qu'il y a dedans /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   il (au minimum, vous avez besoin 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   version de PHP pour charger ce module, et vous devriez le voir dans la liste   des modules produits 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?


5
2018-05-20 08:08





De ce post, 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, qui permet 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 conf séparés

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

Installez 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 script PHP: Créer un fichier appelé php.sh et le mettre 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

Compiler et installer 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

3
2017-08-30 11:26





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 risquent d'entrer en conflit (et de remplacer les mêmes répertoires).

Solution:

  • pour b) Compiler «l'autre» version PHP depuis le source, manuellement (ou si vous préférez, récupérer la source du paquet approprié et la modifier 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, l'exécuter sur un port séparé.


2
2018-03-28 16:17



il n'y a pas de script préemballé pour compiler ces multiples instances parallèles de php? Juste pour le faire manuellement et les chemins de patch? Cela signifie que toutes les sociétés d'hébergement développent des scripts personnalisés pour exécuter cette version parallèle et ne partagent jamais leurs efforts. - lenzai
Une seule instance d'Apache pouvez lancez 2 versions php à la fois. - Nanne


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


0
2018-06-24 12:13



J'ai déjà PHP 5.3.5 installé. Comment installer PHP 5.2.17? Pourriez-vous s'il vous plaît me dire où et ce que je dois changer pour basculer entre ces deux versions? Le fichier httpd.conf est vide dans mon installation. - Debiprasad


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

J'ai utilisé cette approche une fois.

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

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 fichiers php-fpms et définir apache pour les utiliser les uns les autres.


0
2018-02-02 22:57



Bienvenue sur Ask Ubuntu! Bien que cela puisse théoriquement répondre à la question, ce serait préférable inclure les parties essentielles de la réponse ici, et fournir le lien pour référence. - user98085
Je n'ai pas eu le temps de faire ce que vous avez dit. Je suppose que je voulais seulement montrer un moyen. Stil doit apprendre à utiliser les trucs de formage. Merci quand même! - Henrique Fernandes


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





Au lieu de faire de multiples VirtualHost Je viens d'ajouter le code ci-dessous dans mon .htaccess fichier et étonnamment cela a fonctionné,

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

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


0
2018-05-25 11:59