Avoir plusieurs versions de PHP sous XAMPP

Avoir plusieurs versions de PHP sous XAMPP

Catégories du post

Quand on intervient sur un site qui date un peu et qu’on veut travailler dessus en local sous XAMPP, il n’est pas rare de devoir rétrograder sa version de PHP mais la manipulation peut s’avérer délicate sous Windows. Bien sûr, on peut installer plusieurs versions de XAMPP pour répondre à tous les besoins mais personnellement je préfère avoir un seul environnement sur mon pc. Voici, sans doute, la méthode la plus simple pour y parvenir :

Tout d’abord, si ce n’est pas déjà fait, téléchargez la dernière version de XAMPP sur le site officiel et installez-la.

Une fois installé, exécutez le logiciel puis cliquez sur explorer en haut à droite :

Cela vous amène à la racine du dossier XAMPP. A partir de là, allez dans /apache/conf/extra et créez une copie du fichier http-xampp.conf et renommez ce fichier en le suffixant, par exemple, du numéro de version de php auquel correspondra ce fichier.

Ouvrez ce fichier dans votre éditeur de texte favoris, on y revient un peu plus tard.

Maintenant, il va falloir récupérer les versions de PHP qui nous intéressent. Là où cet article diffère des autres qu’on trouve sur internet, c’est qu’on va opter pour une solution qui va droit au but, plutôt que de se perdre dans des paramétrages chronophages.

Nous n’irons donc pas télécharger les dernières versions de PHP sur le site officiel de PHP en version Thread Safe, même si ça serait l’approche la plus « logique ». Il manquera des fichiers et/ou des dossiers à coup sûr pour un bon fonctionnement sous XAMPP.

Au lieu de ça, nous irons sur le site d’Apache Friends, récupérer les versions zip de Xampp qui nous intéresse.

  • Téléchargez les différents packages qui vous intéresse et dézippez-les
  • Rendez-vous dans chacun des dossiers décompressés et préfixez le dossier php que vous y trouvez avec son numéro de version (par exemple php devient php7)
  • Copiez/collez ensuite ce dossier php à la racine de votre installation de XAMPP (cliquez sur le bouton explorer du logiciel pour le trouver plus facilement)

Personnellement, j’ai ça :

Il faut maintenant indiquer à XAMPP quelle version de php utiliser. Dans la dernière version de XAMPP en date, le fichier http-xampp.conf original ressemble à ça :

#
# XAMPP settings
#

<IfModule env_module>
    SetEnv MIBDIRS "C:/xampp/php/extras/mibs"
    SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
    SetEnv OPENSSL_CONF "C:/xampp/apache/bin/openssl.cnf"
    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
    #SetEnv PHPRC "\\xampp\\php"
    SetEnv TMP "\\xampp\\tmp"
</IfModule>

#
# PHP-Module setup
#
LoadFile "C:/xampp/php/php8ts.dll"
LoadFile "C:/xampp/php/libpq.dll"
LoadModule php_module "C:/xampp/php/php8apache2_4.dll"
LoadFile "C:/xampp/php/libsqlite3.dll"

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

#
# PHP-CGI setup
#
#<FilesMatch "\.php$">
#    SetHandler application/x-httpd-php-cgi
#</FilesMatch>
#<IfModule actions_module>
#    Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
#</IfModule>


<IfModule php_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

<IfModule mime_module>
    AddType text/html .php .phps
</IfModule>

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

<Directory "C:/xampp/cgi-bin">
    <FilesMatch "\.php$">
        SetHandler cgi-script
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler None
    </FilesMatch>
</Directory>

<Directory "C:/xampp/htdocs/xampp">
    <IfModule php_module>
    	<Files "status.php">
    		php_admin_flag safe_mode off
    	</Files>
    </IfModule>
    AllowOverride AuthConfig
</Directory>

<IfModule alias_module>
    Alias /licenses "C:/xampp/licenses/"
    <Directory "C:/xampp/licenses">
        Options +Indexes
        <IfModule autoindex_color_module>
            DirectoryIndexTextColor  "#000000"
            DirectoryIndexBGColor "#f8e8a0"
            DirectoryIndexLinkColor "#bb3902"
            DirectoryIndexVLinkColor "#bb3902"
            DirectoryIndexALinkColor "#bb3902"
        </IfModule>
        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
   </Directory>

    Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
    <Directory "C:/xampp/phpMyAdmin">
        AllowOverride AuthConfig
        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>

    Alias /webalizer "C:/xampp/webalizer/"
    <Directory "C:/xampp/webalizer">
        <IfModule php_module>
    		<Files "webalizer.php">
    			php_admin_flag safe_mode off
    		</Files>
        </IfModule>
        AllowOverride AuthConfig
        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>
</IfModule>

Il va donc falloir jouer au jeu des 7 erreurs, trouver les différentes mentions de php et les faire pointer vers les bons fichiers dans nos nouveaux dossiers. Par exemple, pour php 7, les lignes à modifier seraient :

  • SetEnv MIBDIRS « C:/xampp/php7/extras/mibs »
  • SetEnv MYSQL_HOME « \\xampp\\mysql\bin »
  • SetEnv PHP_PEAR_SYSCONF_DIR « \\xampp\\php7 »
  • SetEnv PHPRC « \\xampp\\php7 »
  • LoadFile « C:/xampp/php7/php7ts.dll »
  • LoadFile « C:/xampp/php7/libpq.dll »
  • LoadModule php7_module « C:/xampp/php7/php7apache2_4.dll » (pour savoir quel nom de module utiliser, vous pouvez aller jeter un oeil dans le fichier http-xampp.conf de la version de php correspondante, ici on remplace php_module par php7_module)
  • #LoadFile « C:/xampp/php7/libsqlite3.dll » (on commente cette ligne, ce fichier n’existe pas dans le dossier php7)
  • <IfModule php7_module>
  • PHPINIDir « C:/xampp/php7 »
  • ScriptAlias /php-cgi/ « C:/xampp/php7/ »
  • <Directory « C:/xampp/php7 »>

La liste des modifications est longue mais une fois que c’est fait, on ne revient plus dessus.

Pour php 7, le fichier http-xampp.conf devrait donc ressembler à ça :

#
# XAMPP settings pour php 7
#

<IfModule env_module>
    SetEnv MIBDIRS "C:/xampp/php7/extras/mibs"
    SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
    SetEnv OPENSSL_CONF "C:/xampp/apache/bin/openssl.cnf"
    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php7"
    SetEnv PHPRC "\\xampp\\php7"
    SetEnv TMP "\\xampp\\tmp"
</IfModule>

#
# PHP-Module setup
#
LoadFile "C:/xampp/php7/php7ts.dll"
LoadFile "C:/xampp/php7/libpq.dll"
LoadModule php7_module "C:/xampp/php7/php7apache2_4.dll"
#LoadFile "C:/xampp/php7/libsqlite3.dll"

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

#
# PHP-CGI setup
#
#<FilesMatch "\.php$">
#    SetHandler application/x-httpd-php-cgi
#</FilesMatch>
#<IfModule actions_module>
#    Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
#</IfModule>


<IfModule php7_module>
    PHPINIDir "C:/xampp/php7"
</IfModule>

<IfModule mime_module>
    AddType text/html .php .phps
</IfModule>

ScriptAlias /php-cgi/ "C:/xampp/php7/"
<Directory "C:/xampp/php7">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
          Require all granted
    </Files>
</Directory>

<Directory "C:/xampp/cgi-bin">
    <FilesMatch "\.php$">
        SetHandler cgi-script
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler None
    </FilesMatch>
</Directory>

<Directory "C:/xampp/htdocs/xampp">
    <IfModule php_module>
    	<Files "status.php">
    		php_admin_flag safe_mode off
    	</Files>
    </IfModule>
    AllowOverride AuthConfig
</Directory>

<IfModule alias_module>
    Alias /licenses "C:/xampp/licenses/"
    <Directory "C:/xampp/licenses">
        Options +Indexes
        <IfModule autoindex_color_module>
            DirectoryIndexTextColor  "#000000"
            DirectoryIndexBGColor "#f8e8a0"
            DirectoryIndexLinkColor "#bb3902"
            DirectoryIndexVLinkColor "#bb3902"
            DirectoryIndexALinkColor "#bb3902"
        </IfModule>
        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
   </Directory>

    Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
    <Directory "C:/xampp/phpMyAdmin">
        AllowOverride AuthConfig
        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>

    Alias /webalizer "C:/xampp/webalizer/"
    <Directory "C:/xampp/webalizer">
        <IfModule php_module>
    		<Files "webalizer.php">
    			php_admin_flag safe_mode off
    		</Files>
        </IfModule>
        AllowOverride AuthConfig
        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>
</IfModule>

Dans le screen de ma config ci-dessous, mon fichier http-xampp.conf contient tous les paramétrages pour exécuter php 7, mais j’ai aussi les fichiers nécessaires pour php 8 et php 5.6.

Eh voilà ! Maintenant, pour exécuter XAMPP avec la version de php que l’on souhaite, il suffit de renommer le fichier de config qu’on veut utiliser en http-xampp.conf et de suffixer les autres comme vu plus haut. Et surtout, ne pas oublier de redémarrer Apache.

S’abonner
Notifier de
guest

3 Commentaires
Inline Feedbacks
Voir tous les commentaires
Patric

Bonjour,

Merci beaucoup pour ce tuto détaillé et bien utile. 🙂

Je n’arrive malheureusement pas à démarrer apache avec PHP5.6. J’ai beau parcourir le fichier de configuration, je n’arrive pas à trouver ce qui manque. Et il n’y a rien dans les logs… Pourriez-vous en dire un peu plus sur votre fichier de conf dans cette version SVP ? Merci.

Autre chose : les doubles backslashes sont devenus des simples dans votre listing de modifications à faire.
De plus, en ce qui me concerne, j’ai bien un fichier « libsqlite3.dll » en PHP7.
C’est dans la version 5 qu’il n’existe pas.

Patric

Dernière modification 1 année avant par Patric
Patric

Merci pour votre réponse rapide !

Hélas même avec votre fichier ça ne fonctionne toujours pas.
J’utilise xampp-windows-x64-8.2.0-0-VS16 (dernière version en date).
Et le dossier PHP de xampp-windows-x64-5.6.40-1-VC11.

Au lancement d’Apache j’ai le message d’erreur :
Error: Apache shutdown unexpectedly.
This may be due to a blocked port, missing dependencies, 
improper privileges, a crash, or a shutdown by another method.
Press the Logs button to view error logs and check
the Windows Event Viewer for more clues
If you need more help, copy and post this
entire log window on the forums
Mais je ne trouve rien dans les logs ni dans l’event viewer de Windows…
Et tout fonctionne bien avec PHP 7.4.

Si je continue de bloquer, je posterai sur le forum de Xampp.
Merci en tout cas !