257 votes

Y a-t-il un moyen d'utiliser deux versions de PHP dans XAMPP ?

Nous utilisons XAMPP avec PHP 7.0 car nos nouveaux produits nécessitent PHP 7.

Mais il existe d'anciens projets qui utilisent des fonctions comme mysql_connect etc. Ces éléments ont été supprimés dans PHP 7.0.

Alors, existe-t-il un moyen de changer facilement les versions de PHP dans XAMPP ?

Note : S'il vous plaît, ne me suggérez pas de mettre à jour mon ancien projet pour qu'il soit compatible avec les nouvelles versions, car je ne suis pas en mesure de le faire à cause de ces décisions que je ne peux pas obtenir en tant que développeur (juste un employé).

0 votes

Je ne pense pas qu'il y ait une solution de rechange à ce que vous voulez faire autre que la mise à niveau. De plus, vous ne devriez pas trouver des moyens de rendre compatibles les API anciennes et dépréciées. Elles devraient être totalement supprimées. Évidemment, c'est beaucoup de travail, mais cela garantirait la tranquillité d'esprit.

1 votes

J'arrête et je démarre Apache lorsque je veux changer de version de PHP dans MAMP. C'est pénible, mais ça marche.

0 votes

Vous pouvez faire un double démarrage

285voto

Munim Munna Points 13181

Pourquoi changer de version de PHP quand on peut utiliser plusieurs versions de PHP version en même temps que une seule installation de xampp ? Avec une seule installation de xampp, vous avez 2 possibilités :

  1. Exécutez une ancienne version de PHP pour seulement le répertoire de votre ancien projet : Ceci est utile la plupart du temps, vous pouvez avoir un ou deux anciens projets que vous avez l'intention d'exécuter avec une ancienne version de PHP. vieux projets que vous avez l'intention d'exécuter avec une ancienne version de PHP. Il suffit de configurer xampp pour qu'il exécute l'ancienne version de PHP uniquement pour ces répertoires de projets.

  2. Exécutez une ancienne version de PHP sur un port séparé de xampp : Parfois, vous pouvez vous mettez à jour un ancien projet vers la dernière version de PHP et que vous devez même projet sur la nouvelle et l'ancienne version de PHP. Vous pouvez alors définir une ancienne version de PHP sur un port différent (disons 8056) Ainsi, lorsque vous allez dans http://localhost/any_project/ xampp exécute PHP 7 et lorsque vous allez dans http://localhost:8056/any_project/ xampp exécute PHP 5.6.

  3. Exécutez une ancienne version de PHP sur un serveur virtuel : Vous pouvez créer un serveur virtuel comme localhost56 pour exécuter PHP 5.6 alors que vous pouvez utiliser PHP 7 sur localhost.

Mettons cela en place.

Étape 1 : Télécharger PHP

Vous avez donc PHP 7 qui tourne sous xampp, et vous voulez y ajouter une version plus ancienne de PHP, disons PHP 5.6. Téléchargez l'archive zip de la version nts (Non Thread Safe) de PHP à l'adresse suivante php.net (voir archives pour les anciennes versions) et extraire les fichiers sous c:\xampp\php56 . La version thread safe n'inclut pas php-cgi.exe.

Étape 2 : Configurer php.ini

Ouvrir c:\xampp\php56\php.ini dans le bloc-notes. Si le fichier n'existe pas, copiez php.ini-development à php.ini et l'ouvrir dans le bloc-notes. Décommentez ensuite la ligne suivante :

extension_dir = "ext"

Étape 3 : Configurer apache

Ouvrez le panneau de contrôle xampp, cliquez sur le bouton de configuration pour apache, et cliquez sur Apache (httpd-xampp.conf) . Un fichier texte s'ouvrira, avec les paramètres suivants au bas du fichier :

ScriptAlias /php56 "C:/xampp/php56"
Action application/x-httpd-php56-cgi /php56/php-cgi.exe
<Directory "C:/xampp/php56">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
        Require all granted
    </Files>
</Directory>

Note : Vous pouvez ajouter d'autres versions de PHP à votre installation xampp en suivant les étapes 1 à 3 si vous le souhaitez.

Étape 4 (option 1) : [Ajouter des répertoires pour exécuter une version spécifique de PHP].

Vous pouvez maintenant définir des répertoires qui fonctionneront en PHP 5.6. Ajoutez simplement ce qui suit au bas du fichier de configuration pour définir les répertoires.

<Directory "C:\xampp\htdocs\my_old_project1">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</Directory>

<Directory "C:\xampp\htdocs\my_old_project2">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</Directory>

Étape 4 (option 2) : [Exécuter une ancienne version de PHP sur un port séparé].

Maintenant, pour configurer PHP v5.6 sur le port 8056, ajoutez le code suivant au bas du fichier de configuration.

Listen 8056
<VirtualHost *:8056>
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</VirtualHost>

Étape 4 (option 3) : [Exécuter une ancienne version de PHP sur un serveur virtuel].

Pour créer un virtualhost (localhost56) sur un répertoire (htdocs56) pour utiliser PHP v5.6 sur http://localhost56 créez le répertoire htdocs56 à l'endroit désiré et ajoutez localhost56 à votre fichier hosts ( voir comment ), puis ajoutez le code suivant au bas du fichier httpd-xampp.conf.

<VirtualHost localhost56:80>
    DocumentRoot "C:\xampp\htdocs56"
    ServerName localhost56
    <Directory "C:\xampp\htdocs56">
        Require all granted    
    </Directory>
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</VirtualHost>

Finition : Sauvegarder et redémarrer Apache

Sauvegardez et fermez le fichier de configuration, redémarrez apache à partir du panneau de contrôle xampp. Si vous avez choisi l'option 2, vous pouvez voir le port supplémentaire (8056) listé dans votre panneau de contrôle xampp.

enter image description here

Mise à jour pour l'erreur :
En-tête malformé provenant de script 'php-cgi.exe' : Mauvais en-tête

Si vous rencontrez l'erreur ci-dessus, ouvrez httpd-xampp.conf et commentez la ligne suivante avec un # en tête (caractère dièse).

SetEnv PHPRC "\\path\\to\\xampp\\php"

13 votes

Hi, I was trying this method (Step 4 Option 1), but get an error malformed header from script 'php-cgi.exe': Bad header: <br />, any ideas what could the problem be ?

0 votes

@Priyanshu Votre installation PHP est-elle correcte ? Pouvez-vous exécuter les fichiers PHP à partir de la ligne de commande comme php somefile.php sans aucune erreur ?

0 votes

Il doit définir le nom de la version souhaitée du dossier php à php et l'autre dossier php à un autre nom.

97voto

Andy Points 2190

Vous pouvez télécharger toutes les versions de PHP dont vous avez besoin et les placer dans leurs propres répertoires, par ex.

c:\php5\

c:\php7\

Tout ce que vous devez faire est d'indiquer à votre serveur web (Apache) quelle version de PHP utiliser, ce que vous faites en chargeant le module approprié. Dans Apache, vous pouvez le faire en trouvant le fichier httpd.conf et ensuite éditer la ligne appropriée :

LoadModule php7_module c:\php7\libphp7.so

Il vous faudra bien sûr trouver les chemins corrects - ceci n'est qu'une illustration.

Sauvez httpd.conf et redémarrez votre serveur. Notez que si vous ne le redémarrez pas, les changements ne seront pas pris en compte.

Il n'y a pas de commutateur GUI pour pouvoir faire cela, vous devez modifier le fichier .conf et ensuite redémarrer Apache. Cette opération ne prend que quelques secondes et vous pouvez même commenter une version pour que le "changement" ne prenne que quelques frappes, par ex.

Utilisez PHP 5 :

LoadModule php5_module c:\php5\libphp5.so
#LoadModule php7_module c:\php7\libphp7.so

Utilisez PHP 7 :

#LoadModule php5_module c:\php5\libphp5.so
LoadModule php7_module c:\php7\libphp7.so

Vous n'avez pas besoin de plusieurs versions de XAMPP. L'OP veut utiliser XAMPP et lui dire quelle version de PHP il doit utiliser. L'OP veut utiliser XAMPP et lui dire quelle version de PHP utiliser. C'est la façon la plus rapide et la plus efficace de le faire, et cela ne nécessite qu'une seule installation de XAMPP.

Edit 1-Nov-2017 : Apparemment, certaines personnes disent qu'il n'y a pas de .so sous Windows. La réponse que j'ai donnée était adaptée de la manière dont j'ai configuré les choses sur mon Mac (qui utilise .so au lieu de .dll ). Le principe de la réponse reste cependant tout à fait correct. Vous utilisez le fichier de configuration d'Apache, httpd.conf pour préciser le module PHP ( .so ou .dll ) se trouve sur votre système. La seule différence pour Windows serait donc le nom du fichier et/ou le chemin d'accès. La réponse que j'ai donnée est également correcte pour une installation classique d'Apache/PHP (sans XAMPP).

1 votes

Je pense que votre réponse est la meilleure et je vais l'attendre. Mais je n'ai pas trouvé de ligne similaire à 'LoadModule php7_module c : \php7\libphp7.so dans httpd/conf

0 votes

Faites une recherche dans le fichier conf pour LoadModule . Ils sont généralement listés ensemble. Vous n'en verrez pas pour php7_ à moins qu'il ne soit déjà configuré pour PHP 7. Plus probable de voir php5_ ou quelque chose de similaire. Les modules ont généralement l'extension de fichier .so .

3 votes

J'ai encore refusé le contrôle. Je n'ai pas pu le trouver. Pouvez-vous s'il vous plaît vérifier mon fichier httpd.conf. Voici la copie de celui-ci. freetexthost.com/sjxz4lh1i5 S'il vous plaît laissez-moi savoir si vous trouvez cette ligne que je devrais changer.

46voto

Maulik Gangani Points 1242

Vous pouvez télécharger et installez deux xampps différents comme je le fais : (le premier est php7 le second est php5) enter image description here

et si vous ne voulez pas faire ça, je vous suggère d'utiliser wamp et de changer les versions comme indiqué ci-dessous. ici .

7 votes

Pourquoi faites-vous cela ? Vous installez à nouveau une grande partie du même logiciel, juste pour une différence minime (une version différente de PHP, alors que le reste du logiciel comme Apache et MySQL est exactement le même). J'ai posté une solution où vous pouvez simplement utiliser une installation de XAMPP et la diriger vers la version appropriée de PHP.

31 votes

Pourquoi faire ça ? parce que ça marche, et ça ne me dérange pas d'avoir plusieurs apaches et mysql installés si ça permet de gagner du temps.

35 votes

Pas besoin de se soucier des meilleures pratiques ici, c'est un environnement local

14voto

Nigel Ren Points 30531

Je vous recommande d'utiliser Docker, qui vous permet de diviser l'environnement en plusieurs composants et de mélanger ceux que vous voulez à tout moment.

Docker vous permettra d'exécuter un conteneur avec MySQL, un autre avec PHP. Comme il s'agit d'images distinctes, vous pouvez avoir deux conteneurs, l'un avec PHP 5, l'autre avec PHP 7. Vous démarrez celui que vous voulez et le port 80 peut être assigné aux deux conteneurs.

https://hub.docker.com dispose d'un large éventail d'images préconfigurées que vous pouvez installer et exécuter sans trop de difficultés.

J'ai également ajouté portainer en tant qu'image, ce qui vous permet de gérer les différents aspects de votre configuration docker - à partir d'une image docker (j'ai démarré ce conteneur au démarrage pour m'éviter d'avoir à utiliser la ligne de commande). Il ne fait pas tout pour vous et il est parfois plus facile de configurer et de lancer les images pour la première fois à partir de la ligne de commande, mais une fois configuré, vous pouvez les démarrer et les arrêter par le biais d'une interface web.

Il est également possible d'exécuter les deux conteneurs en même temps et de leur attribuer des ports distincts. Ainsi, le port 80 peut être assigné à PHP 5 et le port 81 à PHP 81 (ou PHP 7 si vous regardez ceci en 2017).

Il existe plusieurs tutoriels sur la façon d'installer Docker( https://docs.docker.com/engine/installation/ ) et beaucoup d'autres choses du type "comment faire". Essayez http://www.masterzendframework.com/docker-development-environment/ pour la configuration d'un environnement de développement.

0 votes

Je suis d'accord avec ça. Faites une faveur à votre entreprise et faites fonctionner Docker. Changez de version de PHP, intégrez plus rapidement de nouveaux développeurs, facilitez le déploiement et évitez les surprises en production.

0 votes

et 81 à PHP 81. Vous voulez dire PHP 7 ? Je pense que nous sommes encore loin de PHP 81 :)

2 votes

Errrr... Je voulais vraiment dire 81 (je m'assure que ma réponse est à l'épreuve du futur :-/ )

6voto

og1842 Points 69

Vous pouvez avoir deux versions différentes de XAMPP.

  • Téléchargez ces fichiers à partir de https://www.apachefriends.org/download.html et l'installer dans un répertoire de votre choix, par exemple dans C:\5.6.31\xampp et C:\7.1.18\xampp.
  • Après chaque installation, allez dans le répertoire installé (ex. C:\5.6.31\xampp , C:\7.1.18\xampp ) et lancez le "setup_xampp.bat" et vous devriez voir quelque chose comme ceci.
  • Vous pouvez créer des raccourcis de "xampp-control.exe" sur votre bureau (clic droit sur "xampp-control.exe" Envoyer vers -> Bureau) et renommer les raccourcis par ex. "xampp 5.6.31" et "xampp 7.1.8".
  • Démarrez le panneau de contrôle XAMPP en double-cliquant sur "xampp-control.exe" ou sur le raccourci créé précédemment et démarrez les serveurs Apache et MySQL.
  • Pour tester l'installation, ouvrez votre navigateur et tapez 127.0.0.1 ou localhost dans la barre d'adresse. Vous devriez voir l'écran de démarrage de XAMPP.
  • Ne pas ouvrir plus d'un panneau de contrôle XAMPP.
  • Désinstallation de XAMPP ? Il suffit de supprimer le répertoire "xampp". Mais avant cela, arrêtez apache et mysql.
  • C'est tout. Vous pouvez utiliser différentes versions de php en ouvrant le panneau de contrôle XAMPP correspondant.

0 votes

Si c'est vraiment possible de le faire avec une seule installation, pourquoi ne pas poster une solution ? En fait, il est très difficile d'installer 2 versions et toutes les solutions proposées ici sont fausses...

0 votes

@Andy Si la base de données n'est pas si grande, la double installation est une option viable. Mais votre réponse a obtenu mon upvote.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X