Nous utilisons XAMPP avec PHP 7.0 car nos nouveaux produits nécessitent PHP 7.
Mais il y a d'anciens projets qui utilisent des fonctions comme mysql_connect
, etc. Ceux-ci sont supprimés dans PHP 7.0.
Alors, est-il possible de changer facilement les versions de PHP dans XAMPP?
Note: S'il vous plaît, ne suggérez pas de mettre à niveau votre ancien projet pour qu'il soit compatible avec les nouvelles versions car je ne suis pas en mesure de le faire à cause de cette décision que je ne peux pas obtenir en tant que développeur (juste un employé) .
Vous pouvez télécharger toutes les versions de PHP dont vous avez besoin et les placer dans leurs propres répertoires, par exemple.
c:\php5\
c:\php7\
Tout ce que vous avez à faire est d’indiquer à votre serveur Web (Apache) la version de PHP à utiliser, ce que vous faites en chargeant le module approprié. Dans Apache, vous pouvez le faire en recherchant le fichier httpd.conf
puis en modifiant la ligne appropriée:
LoadModule php7_module c:\php7\libphp7.so
Vous devrez bien sûr trouver les bons chemins - ceci est juste pour illustration.
Enregistrez httpd.conf
et redémarrez votre serveur. Notez que si vous ne le redémarrez pas, les modifications ne prendront effet.
Il n’existe aucun commutateur graphique pour cela, vous devez éditer le fichier .conf
puis redémarrer Apache. Cela ne prend que quelques secondes et vous pouvez même commenter une version afin que le "changement" ne prenne que quelques frappes, par exemple.
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, ou pour effectuer un double démarrage, ou utiliser une machine différente, ou l’une des autres "solutions" qui ont suggéré des solutions de contournement compliquées. L'OP souhaite utiliser XAMPP et lui indiquer quelle version de PHP utiliser. C’est le moyen le plus rapide et le plus efficace de le faire et ne nécessite qu’une installation de XAMPP.
Edit 1-Nov-2017: Apparemment, certaines personnes disent qu'il n'y a pas de fichiers .so
sous Windows. La réponse que j'ai donnée est adaptée de la manière dont les choses sont configurées sur mon Mac (qui utilise des fichiers .so
à la place de .dll
). Le principe de la réponse est cependant toujours parfaitement correct. Vous utilisez le fichier de configuration d'Apache, httpd.conf
pour spécifier where le module PHP (.so
ou .dll
) se trouve sur votre système. Donc, la seule différence pour Windows serait le nom du fichier et/ou l’emplacement du chemin. La réponse que j'ai donnée est également correcte pour une installation Apache/PHP de Vanilla (sans XAMPP du tout).
Pourquoi basculer entre PHP versions lorsque vous pouvez utiliser plusieurs PHP version simultanément une installation unique de xampp ? Avec une seule installation xampp, vous avez 2 options:
Lancez une ancienne version de PHP uniquement pour le répertoire de votre ancien projet: Ceci servira la plupart du temps, vous pourrez avoir un ou deux anciens projets que vous avez l'intention d'exécuter avec l'ancienne version PHP. Il suffit de configurer xampp pour qu’il exécute la version antérieure PHP uniquement pour ces répertoires de projet.
Exécutez une ancienne version de PHP sur un port séparé de xampp: Il est parfois possible de mettre à jour un ancien projet avec la dernière PHP version lorsque vous devez exécuter le même projet sur les versions antérieures et antérieures de PHP. Ensuite, vous pouvez définir une ancienne version de PHP sur un autre port (disons 8056). Ainsi, lorsque vous accédez à http://localhost/any_project/
xampp exécute PHP 7 et lorsque vous accédez à http://localhost:8056/any_project/
xampp exécute PHP 5.6.
Exécutez une ancienne version PHP sur un hôte virtuel: Vous pouvez créer un hôte virtuel tel que localhost56 pour exécuter PHP 5.6. alors que vous pouvez utiliser PHP 7 sur localhost.
Permet de le configurer.
Étape 1: Téléchargez PHP
Donc, vous avez PHP 7 sous xampp, vous voulez y ajouter une ancienne version PHP, disons PHP 5.6. Téléchargez la version nts (Non Thread Safe) de PHP archive Zip de php.net (voir archive pour les versions antérieures) et extrayez les fichiers sous c:\xampp\php56
. La version thread-safe n'inclut pas php-cgi.exe.
Étape 2: Configurez php.ini
Ouvrez le fichier c:\xampp\php56\php.ini
dans le bloc-notes. Si le fichier n'existe pas, copiez php.ini-development
vers php.ini
et ouvrez-le dans le bloc-notes. Puis décommentez la ligne suivante:
extension_dir = "ext"
Étape 3: Configurez Apache
Ouvrez le panneau de configuration de xampp, cliquez sur le bouton de configuration pour Apache, puis sur Apache (httpd-xampp.conf)
. Un fichier texte s'ouvrira, mettez 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>
Remarque: Vous pouvez ajouter plusieurs 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 les répertoires à exécuter sous PHP 5.6. Il suffit d’ajouter 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 la version antérieure PHP sur un port séparé]
Maintenant, pour définir 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 version antérieure de PHP sur un hôte virtuel]
Pour créer un hôte virtuel (localhost56) sur un répertoire (htdocs56) afin d'utiliser PHP v5.6 sur http: // localhost56 , créez le répertoire htdocs56 à l'emplacement de votre choix 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>
Terminer: Enregistrez et redémarrez Apache.
Enregistrez et fermez le fichier de configuration, redémarrez Apache à partir du panneau de configuration de xampp. Si vous avez opté pour l'option 2, le port supplémentaire (8056) est répertorié dans le panneau de configuration de xampp.
Mise à jour pour erreur:
En-tête mal formé à partir du script 'php-cgi.exe': En-tête incorrect
Si vous rencontrez l'erreur ci-dessus, ouvrez httpd-xampp.conf
à nouveau et mettez en commentaire la ligne suivante avec un # (caractère de hachage) en tête.
SetEnv PHPRC "\\path\\to\\xampp\\php"
Vous pouvez télécharger et installer deux xampps différents, comme je le fais: (le premier est php7 le second est php5)
et si vous ne voulez pas faire cela, je vous suggère d'utiliser wamp et de changer de version comme indiqué ici .
Je vous recommande d'utiliser Docker, cela vous permet de scinder l'environnement en plusieurs composants et de mélanger et assortir 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, un PHP 5 un autre PHP 7, que vous lanciez le fichier que vous souhaitez et le port 80 pouvant être mappé sur les deux conteneurs.
https://hub.docker.com propose une large gamme d'images préconfigurées que vous pouvez installer et exécuter sans tracas.
J'ai également ajouté portainer en tant qu'image, ce qui vous permet de gérer les différents aspects de la configuration de votre menu fixe - à partir d'une image du menu fixe (j'ai démarré ce conteneur au démarrage pour éviter de devoir utiliser le ligne de commande). Cela 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 la configuration effectuée, vous pouvez les démarrer et les arrêter via une interface Web.
Il est également possible d'exécuter les deux conteneurs en même temps et de mapper des ports distincts sur chacun. Le port 80 peut donc être mappé sur PHP 5 et 81 sur PHP 81 (ou PHP 7 si vous regardez ceci en 2017).
Il existe différents didacticiels sur l’installation de Docker ( https://docs.docker.com/engine/installation/ ) et d’autres types de "comment taper". Essayez http://www.masterzendframework.com/docker-development-environment/ pour une configuration d'environnement de développement.
Vous pouvez avoir deux versions différentes de XAMPP.
J'utilise Uniserver.
Il a cette fonctionnalité intégrée.
C'est si simple.
Uniform Server est une solution de serveur WAMP légère et gratuite pour Windows. Moins de 24 Mo, conception modulaire, inclut les dernières versions d'Apache2, Perl5, PHP (bascule entre PHP53, PHP54, PHP55 ou PHP56), MySQL5 ou MariaDB5, phpMyAdmin ou Adminer4. Aucune installation requise! Pas de poussière de registre! Juste déballer et allumer!
Il fonctionne même sur un lecteur flash. A l’émulation cron, supporte Perl, mariaDB, quelques versions de Mysql, le serveur filezilla et quelques autres choses.
Oui, vous pouvez. Je suppose que vous avez déjà installé un xampp. Alors,
C'est comme ça que je travaille avec plusieurs xampp installés
exécutez ceci dans l'invite de commande Windows (cmd.exe).
set PATH=C:\xampp\php;%PATH%
changez-le en fonction de l'emplacement de l'installation de PHP 7.
À moins que ce ne soit absolument et définitivement XAMPP, vous pouvez essayer d'obtenir ce que vous voulez avec WAMP. WAMP est à peu près la même chose dans des emballages différents.
Une fois que vous l'avez installé, vous pouvez simplement basculer entre les versions php ici:
Vous pouvez installer autant de versions de PHP que vous avez besoin.
Voici comment cela se fait en détail.
Allez juste ici: téléchargement de WAMP
Sélectionnez ensuite votre serveur de base, par exemple. dernière avec php7.
Ensuite, lorsque WAMP 3 est installé, allez dans le dossier: addons et sélectionnez la version php (ou les versions) que vous recherchez. Ils offrent des variantes de PHP à partir de 5.3.29, ce qui devrait fonctionner avec mysql_connect.
Pour installer l'addon, pendant l'installation (double-cliquez sur le fichier exe), pointez simplement sur le dossier où vous avez installé votre WAMP 3.
Ensuite, vous pouvez utiliser le contenu d'autres dossiers, tels que: applications , etc. pour ajouter davantage de fonctionnalités
Tout est interfacé, vous pouvez donc vous concentrer sur le codage et ne pas pirater votre environnement.
Il est possible d'avoir plusieurs versions de PHP configurées avec une seule installation XAMPP. Les instructions ci-dessous fonctionnent pour Windows.
C:\xampp\php
devient C:\xampp\php-7.1.11
.C:\xampp\php-5.4.45
.Maintenant, vous devez éditer la configuration de XAMPP et Apache:
C:\xampp\Apache\conf\httpd.conf
, localisez les paramètres XAMPP pour PHP, vous devriez le changer pour quelque chose comme:Où vous devez commenter (avec #
) les autres versions PHP afin qu'un seul Include
soit interprété à la fois.
#XAMPP settings PHP 7
Include "conf/extra/httpd-xampp.conf.7.1"
#XAMPP settings PHP 5.4.45
#Include "conf/extra/httpd-xampp.conf.5.4.45"
Maintenant, dans le répertoire C:\xampp\Apache\conf\extra
, renommez httpd-xampp.conf
en httpd-xampp.conf.7.1
et ajoutez un nouveau fichier de configuration pour httpd-xampp.conf.5.4.45
. Dans mon cas, j'ai copié le fichier de configuration d'une autre installation de XAMPP pour PHP 5.5, la syntaxe pouvant être légèrement différente pour chaque version.
Editez httpd-xampp.conf.5.4.45
et httpd-xampp.conf.7.1
et remplacez-y toute la référence au répertoire php
par la nouvelle version php-X.X
. Au moins 10 modifications doivent être apportées ici pour chaque fichier.
Vous devez maintenant éditer le fichier php.ini pour les deux versions. Par exemple, pour php 7.1, éditez C:\xampp\php-7.1.11\php.ini
où vous allez remplacer le chemin du répertoire php pour include_path
, browscap
, error_log
, extension_dir
..
Et c'est tout. Vous pouvez maintenant démarrer Apache à partir du Panneau de configuration XAMPP. Et pour passer d'une version à une autre, il vous suffit de modifier C:\xampp\Apache\conf\httpd.conf
et de modifier la version PHP incluse avant de redémarrer Apache.
Vous n'avez pas besoin de perdre votre temps avec cette configuration, utilisez simplement MAMP :)
MAMP a une interface de sélection de version PHP.
Suivez ces étapes faciles . J'utilise actuellement XAMPP sur PHP 7.2, mais il me faut PHP 5.6 pour travailler sur d'anciens projets.
ÉTAPE 1
Téléchargez la version threadée de PHP sur https://windows.php.net/download
Placez des fichiers sur votre [Lecteur]:\xampp\php5.6
ÉTAPE 2
Copier [Lecteur]:\xampp\Apache\conf\extra\httpd-xampp.conf
Renommez-le en [Lecteur]:\xampp\Apache\conf\extra\httpd-xampp5.6.confRename le fichier en fonction de la version de PHP.
ÉTAPE 3
Editez le 'httpd-xampp5.6.conf' nouvellement créé
en gros, vous devez changer toutes les sources _. et [.dll] PHP.
Avant
LoadFile "C:/xampp/php/php7ts.dll"
LoadFile "C:/xampp/php/libpq.dll"
LoadModule php7_module "C:/xampp/php/php7Apache2_4.dll"
Après
LoadFile "C:/xampp/php5.6/php5ts.dll"
LoadFile "C:/xampp/php5.6/libpq.dll"
LoadModule php5_module "C:/xampp/php5.6/php5Apache2_4.dll"
Voici mon fichier: https://Gist.github.com/mpalencia/f8a20c31bffb02fe20d371218c23d1ec
ÉTAPE 4
Editez le fichier [Lecteur]:\xampp\Apache\conf\httpd.conf
Avant
# XAMPP settings
Include "conf/extra/httpd-xampp.conf"
Après
# XAMPP settings
Include "conf/extra/httpd-xampp5.6.conf"
ÉTAPE 5
Éditez votre configuration PHP 5.6 - php.ini
Ajoutez votre répertoire d'extension: rép_extension = "C:\xampp\php5.6\ext"
ÉTAPE 6
Démarrer Apache
ÉTAPE 7
Editez le chemin de la variable d'environnement PHP sous Windows
C'est probablement la réponse la moins technique à la question, mais c'est aussi la plus facile à accomplir.
Si vous avez deux lecteurs tels que C: et D:, vous pouvez installer une instance distincte de XAMPP sur les deux lecteurs avec des versions php différentes. Cela m'a pris moins de 10 minutes à faire et est le moins sujet aux erreurs.
Je viens de créer deux raccourcis de bureau vers xampp-control.exe et de nommer les raccourcis d'après leur version php. J'espère que cela aide quelqu'un comme moi qui préfère une solution très rapide et sale.
J'avais besoin de faire la même chose, alors j'ai cherché comment et suis venu pour empiler le débordement, où l'OP avait le même problème ... Donc, mes conclusions ... j'ai essayé de renommer des fichiers de toutes les directions ET ma conclusion était que ça me prenait au fond trop long. SOOOO j'ai fini par installer la version 7 à partir d'ici:
https://www.apachefriends.org/index.html (élimine les services et quitte xampp avant de tenter)
Lorsqu'on lui a demandé où mettre le nom du répertoire, il doit en être ainsi (donnez-lui un nom différent):
et
DONEZO! Maintenant, assurez-vous de supprimer tous les services et de quitter avant de permuter, et vous aurez 2 envois XAMPP stériles pour jouer.
Hourra! maintenant je peux réellement me rendre au travail!
Peut-être un peu tard, mais j'utilise un lot pour renommer les dossiers PHP (une version légèrement modifiée de phpswitch que j'ai trouvée il y a des années).
Vous copiez les différents dossiers dans votre installation XAMPP. Chaque dossier PHP (à l'exception du dossier actif) reçoit le numéro de version sous la forme d'un suffixe (par exemple. php_5.6.32). Dans TOUS LES PHP dossiers, un fichier (PHP_VERSION) est créé. Il contient uniquement le numéro de version correspondant. Le script peut saisir cette information. Mais tout cela est décrit dans le fichier README.
Depuis PHP7 le httpd-xampp.conf charge le php7ts.dll à la place du php5ts.dll. J'ai donc dû étendre le script (PHPSwitch.php) pour renommer ces fichiers de configuration en suivant la même approche.
$renameCur = new PHPSwitch_Rename($currInst['path'], $this->_cfg['phpInstallationsPath'] . $this->_cfg['phpDirName'] . '_' . $currInst['version']);
$renameNew = new PHPSwitch_Rename($newInst['path'], $this->_cfg['phpInstallationsPath'] . $this->_cfg['phpDirName']);
$Apache_curent = $this->_cfg["phpInstallationsPath"]."Apache/conf/extra/httpd-xampp.conf";
$Apache_curent_rename = $this->_cfg["phpInstallationsPath"]."Apache/conf/extra/httpd-xampp_".$currInst['version'].".conf";
$Apache_new = $this->_cfg["phpInstallationsPath"]."Apache/conf/extra/httpd-xampp_".$newInst['version'].".conf";
$Apache_new_rename = $this->_cfg["phpInstallationsPath"]."Apache/conf/extra/httpd-xampp.conf";
$renameCur_Apache_conf = new PHPSwitch_Rename($Apache_curent, $Apache_curent_rename);
$renameNew_Apache_conf = new PHPSwitch_Rename($Apache_new, $Apache_new_rename);
$transaction = new PHPSwitch_Rename_Transaction();
$transaction->add($renameCur);
$transaction->add($renameNew);
$transaction->add($renameCur_Apache_conf);
$transaction->add($renameNew_Apache_conf);
Je travaille sur un projet de dix ans au travail. Donc 5.6 est ma valeur par défaut. Il existe également des petits projets plus anciens qui ne fonctionnent qu'avec la version 5.2 et je souhaite également travailler sur de nouvelles versions pour mes projets personnels avec la version 7.3.8.
Voici ce que j'ai fait pour ajouter 5.2 et 7.3.8 sur la version 5.6 par défaut.
1 - Versions téléchargées php TS;
v7.3.8 (dernière): https://windows.php.net/download/
2 - Extrait dans le dossier c:\xampp\php738 et c:\xampp\php52 dans l'ordre
3 - Ajout de ces lignes au bas de httpd-xampp.conf (ou httpd.conf);
*** AVIS IMPORTANT: Vous ne devez PAS utiliser le nom d'alias de script comme nom de dossier cible, ils doivent être différents. (par exemple/php7x est ok,/php7 n'est pas)
ScriptAlias /php7x "C:/xampp/php738"
Action application/x-httpd-php7-cgi /php7x/php-cgi.exe
<Directory "C:/xampp/php738">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
<Directory "D:\www\php7">
<FilesMatch "\.php$">
SetHandler application/x-httpd-php7-cgi
</FilesMatch>
</Directory>
ScriptAlias /phpold "C:/xampp/php52"
Action application/x-httpd-phpold-cgi /phpold/php-cgi.exe
<Directory "C:/xampp/php52">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
<Directory "D:\www\php52">
<FilesMatch "\.php$">
SetHandler application/x-httpd-phpold-cgi
</FilesMatch>
</Directory>
Merci à @ Munim Munna pour la réponse détaillée, je voulais partager un échantillon solide avec l’avis important ci-dessus.