Licence CC BY-NC-SA

… ou pour des besoins spécifiques

Nous avons vu deux-trois choses pour pouvoir utiliser notre serveur sans trop de casse-têtes jusqu’à maintenant. Mais le but d’un serveur de développement, c’est d’être le plus proche possible d’un environnement de production.
Du coup, la version de PHP n’est pas la même, ou la version de MySQL. Faut-il installer une autre version de WAMP pour cela ?

Certains frameworks utilisent aussi PHP en ligne de commandes. Comment mettre ça en place ?

Ce chapitre est pensé pour vous qui vous posez ces questions.  :)

WAMP, ses modules, et Microsoft Visual C++

Comme expliqué lors de l’installation, WAMP n’est pas le nom de la solution installée, mais un acronyme qui désigne un environnement : Windows Apache MySQL et PHP. Du coup, il paraît facile de comprendre que WampServer possède une architecture modulaire.

Cette architecture permet d’avoir plusieurs versions des différents composants. Vous pouvez donc avoir autant de versions de PHP que nécessaire, autant de versions de MySQL, voire autant de versions d’Apache.

Ces différentes versions sont téléchargeables à divers endroits, mais s’il y a un point dont il faut tenir compte, c’est la version compatible de Microsoft Visual C++.

Lassé de devoir réexpliquer quelle version est nécessaire pour les diverses versions de WAMP ou des add-ons, le mainteneur actuel fait désormais installer au moins 5 versions, alors que dans la pratique, l’ordinateur n’en utilisera probablement pas plus que trois pour faire fonctionner WAMP. L’avantage étant que si vous voulez de nouveaux add-ons, vous ne devriez pas avoir à installer quoi que ce soit d’autre.  ^^

Les versions de Microsoft Visual C++ sont souvent mentionnées sur les pages de téléchargement, et parfois aussi dans le nom de l’archive du module que vous téléchargez. Seulement, comme Microsoft Visual C++ est long à écrire, c’est souvent raccourci en Visual C++ suivi de l’année, ou abrégé VC, suivi d’un numéro correspondant à une version. Pour ne pas faire simple, même si l’on parle de Microsoft Visual C++ 2012, ce ne sera pas VC2012 ou VC12, mais VC11…

Afin de vous simplifier la tâche, voici un tableau avec la correspondance entre différentes versions abrégées et leur version complète. Les versions de PHP sont mentionnées d’après les informations de la page windows.php.net/download/

Code de version Nom complet Fichier signalé manquant Téléchargement
VC17 (mise à jour rétro-compatible depuis VC14, PHP 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, WAMP 3.x) Microsoft Visual C++ 2022 VCRUNTIME140.dll, msvcr140.dll x86, x64
VC14, VC15, VC16 (obsolètes, voir la première ligne du tableau) Microsoft Visual C++ 2015, 2017, 2019 Voir la première ligne du tableau
VC12 (WAMP 3.x) Microsoft Visual C++ 2013 msvcr120.dll (msvcr130.dll) x86, x64
VC12 update 5 (WAMP 3.x) Mise à jour pour Visual C++ 2013 et Visual C++ Redistributable Package x86 et x64 (choisir dans la page)
VC11 (WAMP 2.5 et 3.x, PHP 5.5, 5.6) Microsoft Visual C++ 2012 (update 4) msvcr110.dll x86 et x64 (choisir dans la page)
VC10 (WAMP 3.x) Microsoft Visual C++ 2010 SP1 msvcr100.dll x86 et x64 (choisir dans la page)
VC9 (WAMP 2.4 et 3.x, PHP 5.3, 5.4) Microsoft Visual C++ 2008 msvcr90.dll x86, x64
KB# (spécifique à votre version de Windows) Mise à jour de sécurité du Runtime C universel api-ms-win-crt-runtime-l1–1-0.dll Choisir dans la page pour votre version exacte de Windows
Abréviations et noms complets des versions de Microsoft Visual C++

Ainsi, faites attention au nom de l’archive du module que vous téléchargez s’il comporte une partie VC#, et regardez aussi ce qui est expliqué sur la page d’où vous téléchargez le module.

Notez que, comme les versions de Visual C++ sont utilisées par beaucoup de programmes sous Windows, il est très possible d’avoir déjà une version compatible de Visual C++ d’installée. Néanmoins, il est conseillé de réinstaller les versions ci-dessus en veillant bien à utiliser le clic droit > Exécuter en tant qu’administrateur, et si proposé, de réparer les installations existantes.

Ne prenez SURTOUT PAS juste un fichier manquant pour le placer directement dans C:\Windows\system32. Vous n’avez aucune assurance que le fichier soit le bon ni qu’il ne fasse pas autre chose que ce qu’il devrait, sans compter que ce ne sera pas nécessairement le seul fichier à aller récupérer.
Toute manipulation qui vous fait toucher aux dossiers système est à considérer comme douteuse — ce n’est pas pour rien que Windows vous demande une validation quand vous y accédez.

A vos risques et périls.

Plusieurs versions de PHP

L’un des atouts intéressants de WAMP est que l’on peut, avec la même installation, avoir plusieurs versions de PHP, afin de travailler avec une version qui correspond à celle qui sera utilisée en production. En effet, WAMP 3.2 est livré avec PHP 8.1, qui n’est pas forcément disponible chez tous les hébergeurs. Il serait donc intéressant de pouvoir utiliser la même version que celle qui sera utilisée en production.

Télécharger les binaires pour Windows

Dans un premier temps, il vous faudra ce qu’on appelle les binaires de PHP pour la version que vous souhaitez.
Les binaires sont simplement des fichiers compilés et prêts à l’utilisation, au contraire des sources.

Comme dans PHP il y a plusieurs extensions, cela fait beaucoup de fichiers, et une arborescence à respecter. C’est pourquoi vous téléchargerez très probablement une archive zip.

Vous pouvez les télécharger depuis divers endroits, néanmoins nous vous conseillons deux sites.

PHP for Windows

Y accéder

Le site officiel, d’où vous pouvez télécharger tout un éventail de versions de PHP, bêtas comme stables. C’est le site à surveiller pour être au courant des sorties de nouvelles versions que vous pourrez utiliser avec WAMP.

Néanmoins, la page de téléchargement peut paraître déroutante : pour les versions actuellement maintenues de PHP, il n’y a pas moins de 4 versions à choix ! :o Laquelle choisir ?

Parmi les versions proposées, vous verrez qu’elles portent la mention Thread Safe ou Non Thread Safe (parfois abrégées TS et NTS). Sans entrer dans les détails, ce qu’il nous faut, c’est une version Thread Safe, Apache gérant le multithreading.

Ensuite, choisir entre x86 et x64 dépend de l’installation de WAMP que vous avez faite.

Une installation x64 de WAMP vous oblige à avoir des versions x64 de PHP. Cela ne fonctionne pas comme Windows avec lequel vous pouvez installer des programmes x86 qui fonctionnent alors que vous avez un Windows x64.

Mais j’ai vraiment besoin de vieilles versions avant 5.6, je fais comment ? :'(

On espère que c’est pour préparer une migration de projet.  :)

Pour PHP 5.2 à 5.5 x86 et PHP 5.5 x64

Vous pouvez utiliser les archives de windows.php.net. La page peut paraître austère et il semble y avoir plein de choses à télécharger, mais souvenez-vous de ce qui a été dit ci-dessus : il ne faut pas prendre de fichier avec nts dans le nom, et basez-vous sur le x86 ou x64 plutôt que sur Win32

Pour PHP 5.2 à 5.4 x64

Vous pourrez trouver votre bonheur sur le site ci-après.

Les forums d’Apache Lounge

Y accéder

Ce site a l’avantage de proposer diverses versions de PHP x86 comme x64, et notamment pour PHP 5.3 et 5.4, alors que ce n’est que depuis PHP 5.5 que PHP est fourni de manière officielle pour Windows avec architecture x64. Les désavantages sont que les nouvelles versions de PHP ne s’y trouvent pas dès leur sortie, et les différentes extensions de PHP ne sont pas nécessairement les mêmes versions que pour PHP officiel — même si ce dernier point porte peu souvent à conséquence.

A vous de trouver dans le forum les sujets qui proposent les versions qui vous intéressent, mais la plupart sont regroupées dans ce sujet.
Là aussi, vous pouvez avoir plusieurs choix pour chaque version. Certaines comportent NTS dans leur nom et ne sont donc pas à prendre.

Ne vous laissez pas dérouter par les éventuelles mentions Win32 et Win64 dans le nom des fichiers, ce n’est pas l’indication qu’il s’agit d’une version Windows 32 ou 64 bits. Seules les mentions x86 et x64 sont à prendre en compte à ce propos.

Installer la nouvelle version de PHP

Une fois l’archive téléchargée, il faut l’extraire dans un dossier particulier.

Si vous vous êtes déjà un peu promené dans le dossier d’installation de WAMP, vous aurez remarqué que les fichiers relatifs à PHP (ainsi qu’à MySQL ou à Apache) sont dans des chemins de ce genre : %WAMPDIR%\bin\php\php5.5.121.
Imaginons maintenant que vous ayez téléchargé PHP 5.5.38. Il vous faudra donc extraire l’archive dans le dossier %WAMPDIR%\bin\php\php5.5.382.
Une fois l’archive extraite, vous devriez donc avoir les dossiers suivants (entre autres) :

  • %WAMPDIR%\bin\php\php5.5.38\dev3
  • %WAMPDIR%\bin\php\php5.5.38\ext4
  • %WAMPDIR%\bin\php\php5.5.38\extras5

Maintenant, il ne suffit pas d’avoir extrait l’archive au bon endroit : WAMP a besoin de deux autres fichiers pour pouvoir fonctionner avec cette nouvelle version de PHP.

Le fichier wampserver.conf

Ce fichier contient un bref script PHP qui permet à WAMP de configurer correctement la liaison avec Apache. En règle générale, vous pouvez le copier depuis une version de PHP (les deux premiers numéros doivent néanmoins concorder) qui fonctionne déjà avec WAMP et la coller dans le dossier où vous avez extrait l’archive, soit dans %WAMPDIR%\bin\php\php5.5.386.

<?php
 
$phpConf['phpIniDir'] = '.';
$phpConf['phpExeDir'] = '.';
$phpConf['phpConfFile'] = 'php.ini';
 
$phpConf['apache']['2.2']['LoadModuleName'] = 'php5_module';
$phpConf['apache']['2.2']['LoadModuleFile'] = 'php5apache2_2.dll';
$phpConf['apache']['2.2']['AddModule'] =  '';
 
$phpConf['apache']['2.4']['LoadModuleName'] = 'php5_module';
$phpConf['apache']['2.4']['LoadModuleFile'] = 'php5apache2_4.dll';
$phpConf['apache']['2.4']['AddModule'] =  '';
 
?>
Exemple de fichier wampserver.conf pour PHP 5

Les lignes 3 à 5 sont les indications pour trouver les exécutables de PHP et le fichier principal de configuration pour la ligne de commandes. Les lignes 7 à 8 pour Apache 2.2, comme le dénote le second index '2.2', et les lignes 11 à 13 pour Apache 2.4.
Avec PHP 8, les lignes 7 à 9 disparaissent, parce que PHP 8 n’est pas compatible avec Apache 2.2.

Pour certaines versions de PHP, ou selon la source, il y a quelque chose de plus à modifier. Certains binaires de PHP ont été fournis avec un fichier php%MAJOR%.dll7 qui est l’équivalent renommé de php%MAJOR%apache2_4.dll8. Deux options s’offrent à vous :

  • renommer le fichier php%MAJOR%.dll9 en php%MAJOR%apache2_4.dll10 et copier-coller le fichier wampserver.conf depuis une autre version de PHP ;
  • changer les lignes du fichier wampserver.conf repris depuis une autre version de PHP, afin de remplacer cette fois php%MAJOR%apache2_4.dll11 par php%MAJOR%.dll12.

Dans les deux cas, les deux premiers numéros de la nouvelle version et de celle dont vous reprenez le fichier doivent concorder.

PHP 8

Pour PHP 8, c’est php8_module qu’il faut remplacer par php_module, le numéro de version ayant disparu du nom du module pour Apache dès cette version. De plus, les lignes contenant '2.2' peuvent toutes être entièrement enlevées du fichier, PHP 8 n’est plus compatible avec Apache 2.2.

Les fichiers php.ini

WAMP a pour particularité d’utiliser deux ou trois fichiers php.ini

  1. %WAMPDIR%\bin\php\php5.5.38\php.ini13 : c’est celui qui sera pris en compte par PHP en ligne de commandes. Vous pouvez vérifier son emplacement avec la commande php --ini.
  2. %WAMPDIR%\bin\php\php5.5.38\phpForApache.ini14 : c’est la sauvegarde de la configuration de PHP pour Apache.
  3. %WAMPDIR%\bin\apache\apache2.4.9\bin\php.ini15
    Depuis WAMP 2.5 et plus, c’est un lien symbolique vers le N° 2. Auparavant, c’était une copie du N° 2. Ce dernier fichier était créé lors du changement de version de PHP ou au premier démarrage. C’était donc la version qui faisait foi pour le module Apache, celui qui était utilisé le plus souvent quand on accédait par HTTP au serveur, et de facto celle qui était mentionnée dans phpinfo.

Il est intéressant de vérifier quel fichier est réellement pris en compte dans la ligne de commandes et dans phpinfo, surtout si vous êtes passé d’une autre solution à WAMP, ou que vous l’avez mis à jour, et que vous avez des problèmes.

Vous n’avez pas à aller dupliquer votre fichier php.ini dans le répertoire d’Apache, mais il vous faut cependant créer phpForApache.ini.

Certaines distribution de PHP sont fournies avec plusieurs fichiers de configuration, notamment parfois php.ini et php-cli.ini, voire aussi php-apache.ini. PHP sait de lui-même que :

  • php-cli.ini est pour la ligne de commandes
  • php-apache.ini est pour Apache

Mais il faut cependant copier php-apache.ini et renommer la copie en phpForApache.ini pour que WAMP fonctionne correctement.

Eviter les incompatibilités avec ICU sous WAMP 2.5 (de 2.5.0 à 2.5.4 compris)

Plus le temps passe, et plus les versions de PHP comme de ses extensions s’améliorent. Mais cela implique aussi que certaines versions des extensions finissent par être considérées comme incompatibles avec les versions de PHP, et vice-versa.
D’autre part, certaines extensions de PHP ne sont pas uniquement un fichier DLL placé dans le répertoire ad-hoc, mais dépendent elle-mêmes de bibliothèques externes qui évoluent aussi. Par exemple, il y a l’extension intl, qui se base sur la bibliothèque ICU.

Sous Windows, cette dernière se présente sous une série de fichiers DLL dont le nom commence par icu, suivi de plusieurs caractères, et d’un numéro de version. Ces fichiers se trouvent dans le même dossier que le fichier php.ini, mais c’est Apache qui en a besoin.
Seulement, Windows n’ira chercher les fichiers là où ils se trouvent uniquement si la version de PHP avec laquelle ils ont été fournis est celle que vous utilisez en ligne de commandes. Or, quand vous avez plusieurs versions de PHP, il n’est pas garanti que la bibliothèque ICU pour la version de PHP en ligne de commandes soit compatible avec la version de l’extension intl…
Les concepteurs de WAMP ont pensé à cela, et ont prévu de quoi gérer les différentes versions d’ICU.

Pour éviter aux utilisateurs de WAMP d’avoir à se soucier de fichiers qu’il faudrait déplacer pour faire fonctionner leur serveur ainsi que pour éviter de dédoubler des fichiers, WAMP créé des raccourcis vers ceux-ci dans le dossier d’Apache. La liste des fichiers à traiter ainsi est placée dans le code de %WAMPDIR%\scripts\config.inc.php16, et se présente initialement comme suit :

<?php
$phpDllToCopy = array (
	'icudt52.dll', //[modif oto] - Ajouts pour éviter unknown error PHP 5.6.a2
	'icuin52.dll',
	'icuio52.dll',
	'icule52.dll',
	'iculx52.dll',
	'icutest52.dll',
	'icutu52.dll',
	'icuuc52.dll',
	'icudt51.dll', //[modif oto] - Ajouts pour éviter unknown error PHP 5.5.6
	'icuin51.dll',
	'icuio51.dll',
	'icule51.dll',
	'iculx51.dll',
	'icutest51.dll',
	'icutu51.dll',
	'icuuc51.dll',
	// …
Extrait de %WAMPDIR%\scripts\config.inc.php17 fourni avec WAMP 2.5.0

Comme vous pouvez le constater, il s’agit vraiment de la liste des fichiers. Il est possible de permettre de les gérer avec plus de facilité. Plutôt que d’avoir à ajouter 8 lignes à chaque nouvelle version d’ICU, vous pouvez remplacer les lignes 63 à 111 par les suivantes, plus aisément maintenables et extensibles :

<?php
$icu = array(
	'number' => array(
		'54', // PHP 5.6.4
		'53', // PHP 5.6
		'52', // PHP 5.6a2
		'51', // PHP 5.5.6
		//'50', // PHP 5.5
		//'49', // PHP 5.3 / 5.4
	),
	'name' => array(
		'icudt',
		'icuin',
		'icuio',
		'icule',
		'iculx',
		'icutest',
		'icutu',
		'icuuc',
	),
);
$php_icu_dll = array();
foreach($icu['number'] as $icu_number) {
	foreach($icu['name'] as $icu_name) {
		$php_icu_dll[] = $icu_name . $icu_number . '.dll';
	}
}

$phpDllToCopy = array_merge(
	$php_icu_dll,
	array (
		'libeay32.dll',
		'libsasl.dll',
		'libssh2.dll', // PHP 5.5.17
		'php5isapi.dll',
		'php5nsapi.dll',
		'ssleay32.dll',
		'php5ts.dll',
	),
);
Remplacement pour la gestion des versions de la bilbiothèque ICU. Les lignes en surbrillance sont les ajouts de versions d’ICU pour les versions plus récentes de PHP que la 5.5.12 fournie avec WAMP 2.5.0

Ainsi, dès qu’une nouvelle version d’ICU est fournie avec PHP, vous n’avez qu’à ajouter le numéro de version dans la liste, entre les lignes 64 et 65. Si de plus un nouveau fichier est ajouté, alors vous pouvez mettre son nom (sans la partie du numéro de version) à la suite de la ligne 80.

Voilà, il vous suffit maintenant d’apporter les modifications souhaitées aux fichiers de configuration de PHP, puis de redémarrer WAMP.
Si vous cliquez sur l’icône de WAMP dans la barre de statut et que vous allez sur PHP > version, vous devriez désormais avoir 5.5.58 en plus du reste dans la liste. Choisissez cette version. WAMP va redémarrer de lui-même. Rendez-vous à l’adresse http://localhost/?phpinfo pour vérifier que tout va bien, et que c’est bien PHP 5.5.38 qui fonctionne désormais.

Pour repasser à une autre version de PHP, même procédé : clic sur l’icône de WAMP dans la barre de statut > PHP > Version et choisissez-en une autre.
Vous avez maintenant plusieurs versions de PHP avec une seule installation de WAMP ! :magicien:

Mettre à jour vers une révision plus récente

Moi j’aimerais juste avoir la dernière version de PHP, je n’ai plus besoin des autres, je peux les supprimer ?

Oui, mais il faut commencer par installer cette nouvelle version comme expliqué ci-dessus et passer à cette version.

Le noyau de WAMP se base sur PHP pour fonctionner en interne. Il lui faut donc savoir quelle version il doit utiliser ainsi que où la trouver, et la seule qu’on puisse être sûr qu’elle soit présente dès l’installation et donc dont on sait où elle se trouve, c’est celle qui est fournie avec. ;)
Mais comme tout bon programmeur, l’équipe qui travaille sur WAMP a prévu un et un seul endroit où on peut changer très simplement la version à utiliser.

Depuis WampServer 3.1.1, il existe un menu pour ce faire : clic droit sur l’icône de WampServer > Outils > Changer version PHP CLI.

Avec une version moins récente, il faut effectuer la modification ci-dessous alors que WampServer est totalement arrêté.

Rendez-vous dans le dossier d’installation de WAMP, et ouvrez le fichier wampmanager.conf avec un éditeur de texte. Malgré l’extension, c’est le même format de fichier INI que celui utilisé pour configurer PHP et MySQL.

Recherchez alors les lignes suivantes :

[php]
phpCliVersion = "5.6.40"
Bref extrait du contenu du fichier wampmanager.conf

Vous l’aurez compris, il suffit de changer le vieux numéro de version par le nouveau. :magicien:
Vous n’avez pas trop besoin de vous soucier d’éventuels problèmes d’incompatibilité, les scripts de WAMP sont très basiques, et n’utilisent pas de fonctions très avancées.

Si vous aviez prévu une version de PHP en ligne de commandes, assurez-vous qu’elle n’est pas parmi celles que vous allez supprimer.


  1. %WAMPDIR% est à remplacer par le dossier d’installation de WAMP
  2. Idem
  3. Idem
  4. Idem
  5. Idem
  6. Idem
  7. %MAJOR% est à remplacer par le numéro de version majeure de PHP installée (5, 7, 8)
  8. Idem
  9. Idem
  10. Idem
  11. Idem
  12. Idem
  13. %WAMPDIR% est à remplacer par le dossier d’installation de WAMP
  14. Idem
  15. Idem
  16. Idem
  17. Idem

Plusieurs versions du SGBD

WAMP, depuis la version 3.2.0, installe MariaDB par défaut, une alternative open source à et compatible avec MySQL, détenu par Oracle. Il n’est pas nécessaire de passer de MariaDB à MySQL.

Vous vous en doutez, s’il y a moyen d’avoir plusieurs versions de PHP avec WAMP, il y a aussi moyen d’avoir plusieurs versions de SGBD. ;)
Cependant, c’est un peu plus difficile à mettre en place, surtout si vous souhaitez utiliser la version fournie avec WAMP 2.5 (MySQL 5.6.17) avec une version 5.5 et partager les bases de données. Nous allons voir cela en temps utile.

Installer la nouvelle version

Pour trouver la version qui vous plaît, rien de mieux que le site officiel de MariaDB ou celui de MySQL. Naviguez dans le site afin de trouver la version qu’il vous faut.

Ne prenez PAS les MSI Installer, qui sont mis en avant, mais prévus pour des installations séparées des composants d’un serveur.
Prenez l’archive ZIP correspondant à votre installation de WAMP, x86 ou x64.

Le site de MySQL est réfléchi pour que vous pensiez avoir à vous enregistrer afin de télécharger quelque chose, mais il n’en est rien : en bas de la page où les options d’authentification et d’enregistrement s’affichent, il y a le texte No thanks, just start my download. Cliquez dessus pour que commence votre téléchargement.

Une fois cette archive téléchargée, extrayez-là simplement dans le répertoire %WAMPDIR%\bin\%SGBD_NAME%\%SGBD_NAME%%VERSION%\1, en remplaçant %VERSION% par le numéro de version (avec les points) de MySQL que vous voulez installer.

On va encore s’occuper de la configuration de la version de MySQL. Comme point de départ, on va utiliser un fichier de configuration %WAMPDIR%\bin\%SGBD_NAME%\%SGBD_NAME%%VERSION%\my.ini2 (en remplaçant %VERSION% par quelque chose de précédemment installé), le copier-coller dans le dossier de la nouvelle version, et ouvrir cette copie.

Remplacez toutes les occurrences de l’ancienne version par la version que vous venez d’installer, et éventuellement les occurrences du nom du SGBD afin de renseigner correctement les chemins.

Pour une version 5.5 ou moins récente

Dans le cas où vous installez une version 5.5 ou moins récente de MySQL, il y a une autre modification à effectuer.
Localisez les deux lignes qui sont comme celles ci-dessous et commentez-les en ajoutant un ; devant :

explicit_defaults_for_timestamp = TRUE
Lignes qui paramètrent un comportement lié aux colonnes de type timestamp

Finalement, comme on l’a vu pour PHP, il faut mettre un fichier wampserver.conf dans le dossier où l’on vient d’extraire la version souhaitée de MySQL, afin que WAMP puisse savoir comment utiliser cette nouvelle version. Nous n’allons pas faire dans la dentelle parce que ce n’est pas nécessaire : récupérez le fichier wampserver.conf dans le dossier %WAMPDIR%\bin\%SGBD_NAME%\%SGBD_NAME%%VERSION%\3 (remplacez %VERSION% par celui d’une version déjà fonctionnelle) et copiez-collez-le dans le dossier de la nouvelle version.

Si vous redémarrez WAMP, que vous cliquez sur l’icône dans la barre de statut et que vous allez regarder dans MySQL > Version, vous verrez apparaître, en plus de la 5.6.17, celle que vous venez d’installer.

Partager les bases de données entre plusieurs versions

Il est légitime de vouloir retrouver ses données même si on change de version de SGBD. Seulement pour cela, il n’y a pas d’autre manière sûre de faire un export des données depuis l’ancienne vers la nouvelle version.

Sauvegarder les données

Pour ce faire, vous trouverez les informations dans la partie du tutoriel expliquant les sauvegardes. Faites les manipulations, puis fermez totalement WAMP.

Préparer phpMyAdmin pour la nouvelle version de MySQL

Notre nouvelle version de MySQL n’est pas totalement configurée, notamment au niveau des droits d’accès. Or, phpMyAdmin se base dessus : si vous avez un mot de passe pour l’utilisateur root de la précédente version de MySQL, ce mot de passe ne sera pas reconnu, et vous ne pourrez donc pas accéder à phpMyAdmin pour la nouvelle version de MySQL que l’on vient d’installer. Il faut remettre la configuration par défaut, soit root comme utilisateur et aucun mot de passe.

La configuration de phpMyAdmin se fait dans le fichier %WAMPDIR%\apps\phpMyAdmin%VERSION%\config.inc.php4. Nous allons en conserver une copie en l’état : copiez-collez-le dans le même dossier. Vous aurez ainsi un fichier config.inc.php et un autre config.inc - Copie.php.

Ouvrez config.inc.php avec votre éditeur de code favori, et remplacez le contenu par ce qui suit.

<?php
/* Servers configuration */
$i = 0;

$cfg['blowfish_secret'] = 'éhP)(KSds';

/* Server: localhost [1] */
$i++;
$cfg['Servers'][$i]['host'] = '127.0.0.1';
// Laissez "mysqli" si vous l'avez d'activé sur votre serveur
// Si non, mettez simplement "mysql"
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
// Autorise connexion sans mot de passe
$cfg['Servers'][$i]['AllowNoPassword'] = true;

// Supprime l'avertissement aux sujets des tables pmadb
$cfg['PmaNoRelation_DisableWarning'] = true;

/* End of servers configuration */
Contenu qui remplace temporairement ce qu’il y avait dans %WAMPDIR%\apps\phpMyAdmin%VERSION%\config.inc.php5 pour préparer le "partage de bases de données"
Initialiser la nouvelle version de MySQL

Maintenant, il faut initialiser la nouvelle version. Lancez WAMP comme d’habitude. Puis, quand l’icône est verte, cliquez dessus et rendez-vous dans MySQL > Version et activez la nouvelle que nous venons d’installer. L’icône va virer au rouge, puis devrait revenir au vert. Si c’est le cas, vous pouvez continuer. Si l’icône reste orange, fermez WAMP et revérifiez les différentes modifications apportées au fichier my.ini plus haut.

Importer les données (et surtout les utilisateurs)

Pendant la prochaine étape, il nous faut renseigner la nouvelle version sur les utilisateurs que nous avions déjà. Pour ce faire, récupérez le contenu du fichier de sauvegarde contenant les utilisateurs que vous avez créé plus haut en l’ouvrant et le copiant.

Rendez-vous maintenant dans phpMyAdmin, onglet SQL. Collez-y le contenu du fichier de sauvegarde des utilisateurs et exécutez la suite de requêtes, puis quittez phpMyAdmin. Il ne devrait plus être accessible désormais, on va s’en charger.

Remettre la configuration d’origine de phpMyAdmin

Maintenant qu’on a renseigné la nouvelle version de MySQL sur les utilisateurs, on peut remettre la configuration de phpMyAdmin qui en tenait compte.

Retournez dans le dossier %WAMPDIR%\apps\phpMyAdmin%VERSION%\6, et :

  1. renommez le fichier config.inc.php en config-change_version.inc.php, afin de l’avoir encore sous la main dans le cas où vous souhaiteriez installer une autre version de MySQL.
  2. faites encore une copie du fichier config.inc - Copie.php qui va s’appeler config.inc - Copie (2).php
  3. … et renommez ce dernier en config.inc.php.

Vous avez donc remis la configuration d’origine pour phpMyAdmin, mais vous utilisez l’autre version de MySQL. Le fichier config.inc - Copie.php est une sauvegarde qui devrait fonctionner si vous revenez à la précédente version de MySQL.

Voilà, on en a terminé pour la cohabitation de deux (ou plus) versions de vos SGBD avec la même installation de WAMP. Il ne nous reste pas grand-chose à voir pour que vous puissiez travailler dans les meilleures conditions. ^^


  1. %WAMPDIR% est à remplacer par votre dossier d’installation de WAMP, %SGBD_NAME% par le nom en minuscules de votre SGBD
  2. Idem
  3. Idem
  4. %WAMPDIR% est à remplacer par votre dossier d’installation de WAMP, %VERSION% est à remplacer par le numéro de version de phpMyAdmin, avec les points de séparation
  5. Idem
  6. Idem

Générer des certificats SSL/TLS et activer HTTPS

Auparavant, le protocole HTTPS était utilisé principalement pour opérations sensibles effectuées en ligne. Si c’était autant restreint, c’était parce que les connexions sécurisées représentent tout de même une utilisation supplémentaires de ressources tant client que serveur. Mais avec les problèmes de vie privée sur Internet, de nombreux sites ont opté pour cette possibilité sur l’entier de leurs pages, notamment les réseaux sociaux. Et les machines devenant plus performantes, la charge supplémentaire impliquée est minimisée, au point que le protocole historique en clair disparaîtra probablement à moyen terme.

Evidemment, en tant que développeur, cela implique de pouvoir utiliser ce protocole sur la version de travail de nos sites. D’ailleurs, si vous utilisez le nom de domaine de premier niveau .dev, Chrome et Firefox notamment forcent le protocole HTTPS. Or, WAMP n’est pas paramétré pour ça par défaut. Mais comme c’est un serveur Apache comme une grande partie des serveurs actuellement utilisés dans le monde, il est possible de configurer tout ça. La manière présentée ci-après est une version fonctionnelle simplifiée.

L’utilisation d’un certificat SSL demande un nom de domaine, donc a minima un hôte virtuel auquel lier le certificat

Générer un certificat auto-signé

Une des possibilités les plus simples est de créer un certificat auto-signé pour l’hôte virtuel qui en a besoin. Ceci peut se faire aisément avec divers outils, mais nous allons ici nous servir d’un élément qui est fourni avec WAMP : openSSL. Comme son nom l’indique aux amateurs, il s’agit de l’implémentation libre et gratuite des outils pour gérer le protocole SSL.

Une ligne de commandes

La génération du certificat va s’effectuer avec une seule commande, qui demandera quelques informations lors de son exécution.

%WAMPDIR%\bin\apache\apache%APACHE_VERSION%\bin\openssl.exe req --config=%WAMPDIR%\bin\apache\apache%APACHE_VERSION%\conf\openssl.conf -x509 -out %DOMAIN_NAME%.crt -keyout %DOMAIN_NAME%.key -newkey rsa:2048 -nodes -sha256
Un aperçu de la commande. %WAMPDIR% est à remplacer par le chemin d’installation de WAMP ; %APACHE_VERSION% par la version d’Apache, avec les points de séparation ; %DOMAIN_NAME% par le nom de domaine que vous souhaitez certifier

Plutôt que d’enregistrer les fichiers que cette commande va générer dans le dossier de configuration d’Apache, il serait plus intéressant d’utiliser un dossier en-dehors de celui d’Apache afin de faciliter les mises à jour le cas échéant, et de les conserver en cas de désinstallation de WampServer pour passer à une autre solution. Un dossier ssl, au même niveau que www, serait plus pratique. Créez le dossier et rendez-y vous avec la ligne de commandes avant de lancer ce que vous aurez adapté.

Votre certificat pour localhost

Histoire de se simplifier la tâche, on va créer pour premier certificat pour l’hôte virtuel localhost. Cela nous permettra de ne pas avoir trop de modifications à apporter à la configuration lors de la création des certificats pour d’autres hôtes virtuels. Adaptez donc la commande en remplaçant %DOMAIN_NAME% par localhost. La sortie ressemblera à ce qui suit :

%WAMPDIR%\ssl>C:\wamp\bin\apache\apache%APACHE_VERSION%\bin\openssl.exe req --config=C:\wamp\bin\apache\apache%APACHE_VERSION%\conf\openssl.conf -x509 -out localhost.crt -keyout localhost.key -newkey rsa:2048 -nodes -sha256
Generating a RSA private key
.........+.............+..++++.+.......................................++++
......+++++
writing new private key to 'localhost.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) []:Île de France
Locality Name (eg, city) []:Paris
Organization Name (eg, company) []:Zeste de Savoir
Organizational Unit Name (eg, section) []:WAMP : développer avec PHP / AJAX / HTML sous Windows
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:
Exemple d’exécution de la commande avec OpenSSL 1.1.1g

Aux lignes 14 à 20, la commande demande une série d’informations qui peuvent varier selon votre installation. Il peut y avoir des lignes en moins ou des valeurs par défaut entre les crochets avant les deux-points (comme le [AU]: de la ligne 14), mais le plus important se trouve à la ligne 19 : c’est là que vous renseignez le nom de domaine ciblé. Notez cependant :

  • que selon votre version de WAMP lors de l’installation, toutes ces informations ne seront pas nécessairement demandées ;
  • que les valeurs autres que le « Common Name » ne sont pas obligatoires, même s’il est recommandé de les remplir : il n’est pas impossible que votre navigateur se méfie plus des certificats n’ayant pas ces informations à terme ;
  • que la ligne 12 explique qu’il faut saisir un unique point pour n’avoir absolument aucune valeur. En réalité, c’est un peu plus subtil et n’a d’utilité dans l’exemple ci-dessus que pour la ligne 14. Si l’on avait simplement appuyé sur ENTER en pensant laisser l’option « Country Name » vide, c’est « AU » qui aurait figuré dans notre certificat. Pour la ligne 20 en revanche, cela n’aurait pas changé grand chose, parce que la valeur par défaut est déjà vide.

Mais sinon, c’est fait : vous avez généré deux fichiers nommés localhost.key, et un autre localhost.crt dont l’extension est reconnue par Windows, ce qui fait que le type de fichier est similaire à « Certificat de sécurité ». Afin d’utiliser les certificats SSL avec notre installation de WAMP, il nous faut maintenant activer quelques modules et extensions.

Les modules nécessaires et leurs réglages

Si vous ne l’avez pas déjà fait en suivant le tutoriel, il faut dans un premier temps activer l’extension PHP php_openssl.

Ensuite de quoi, il faut activer deux modules Apache :

  1. ssl_module — le nom devrait être suffisamment explicite  ;)  ;
  2. socache_shmcb_module, qui est en bref un module de cache utilisé par Apache pour le SSL.

Maintenant, il faut paramétrer ces modules.

Ne redémarrez pas Apache avant d’avoir terminé les réglages. S’il manque certaines étapes, Apache ne redémarrera pas.

Dans un premier temps, il nous faut inclure dans la configuration d’Apache les réglages pour le SSL. Rendez-vous dans le fichier %WAMPDIR%\bin\apache\apache%APACHE_VERSION%\conf\httpd.conf1, 2 et décommentez la ligne Include conf/extra/httpd-ssl.conf. Vérifiez aussi que les lignes suivantes sont décommentées :

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
Quatre lignes à dé-commenter si besoin

Ensuite, ouvrez le fichier que nous venons d’inclure, %WAMPDIR%\bin\apache\apache%APACHE_VERSION%\conf\extra\httpd-ssl.conf3, 4. Il y a plusieurs choses à adapter, nous allons les traiter de haut en bas.

Première chose à vérifier : si vous avez des ${SRVROOT}, vous pouvez les remplacer par ${INSTALL_DIR}. Ensuite, vous trouverez la ligne DocumentRoot "${INSTALL_DIR}/htdocs". Celle-ci ne correspond pas à notre installation de WAMP, il faut donc remplacer htdocs par www. On s’attend bien à ce que le contenu proposé ne change pas complètement quand on utilise http:// ou https://;)

Ensuite, nous allons lier les fichiers que nous avons créés à notre hôte virtuel. Localisez les deux lignes suivantes. Elles ne sont pas directement l’une sous l’autre, c’est ainsi montré ici pour faciliter les explications.

SSLCertificateFile "${INSTALL_DIR}/conf/server.crt"
SSLCertificateKeyFile "${INSTALL_DIR}/conf/server.key"

Vous l’aurez probablement compris, les deux directives SSLCertificateFile et SSLCertificateKeyFile prennent en argument le chemin vers l’un des deux fichiers. Dans le cas qui nous occupe, il suffira de remplacer la partie conf/server par ssl/localhost — sans modifier l’extension qui correspond déjà à ce qu’il faut mettre et ce qu’on a créé.

Maintenant vous pouvez redémarrer Apache

Accédez maintenant à https://localhost/. Comme c’est un certificat auto-signé qui a été paramétré, votre navigateur va vous informer du risque. Vous pouvez évidemment sans autre continuer vers le site et ajouter une exception.

Vous avez créé votre premier certificat SSL, et vous avez un hôte virtuel avec accès sécurisé.  :)

Définir d’autres hôtes virtuels

Maintenant, c’est bien joli d’avoir sécurisé l’hôte virtuel localhost, mais cela ne sécurise pas tous les hôtes virtuels de votre WAMP en une fois, le certificat étant lié à un nom de domaine spécifique. Il faut donc re-lancer la commande pour un autre nom de domaine et créer l’hôte virtuel nécessaire pour lier le nouveau certificat. Pour simplifier, votre hôte virtuel sécurisé peut reprendre quasiment toutes les informations de l’hôte virtuel qui existe déjà et est accessible par HTTP, il y a évidemment quelques modifications et ajouts à apporter. Reprenons la définition de l’hôte virtuel qu’on avait défini dans la section sur les <VirtualHost>, et effectuons les adaptations.

<IfModule ssl_module>
<VirtualHost *:443>
    ServerAdmin votreemail@exemple.com
    DocumentRoot "C:/wamp/www/monPremierSite"
    ServerName premier-site.localhost
    ServerAlias www.premier-site.localhost

	SSLEngine on
	SSLCertificateFile "${INSTALL_DIR}/ssl/premier-site.localhost.crt"
	SSLCertificateKeyFile "${INSTALL_DIR}/ssl/premier-site.localhost.key"
	<FilesMatch "\.(cgi|shtml|phtml|php)$">
		SSLOptions +StdEnvVars
	</FilesMatch>

    ErrorLog "logs/premier-site.localhost-error.log"
    CustomLog "logs/premier-site.localhost-access.log" common
</VirtualHost>
</IfModule>
Déclaration d’hôte virtuel pour premier-site.localhost adapté pour HTTPS

Les lignes 1 et 18 sont des sécurités en cas de mise à jour d’Apache. Les modules nécessaires ne sont pas forcément activés, et httpd-ssl.conf pas obligatoirement chargé par la nouvelle version, on évite ainsi qu’un hôte virtuel ne pose problème parce qu’il utilise des modules indisponibles.
On a changé le port d’écoute pour l’hôte virtuel : au lieu du port HTTP 80, on a mis le port HTTPS habituel 443. A noter que le fait d’écouter ce port est déterminé dans httpd-ssl.conf, fichier qui a été modifié auparavant.

Les lignes 8 à 19 contiennent le minimum requis pour permettre au serveur d’utiliser l’hôte virtuel correctement : activation du moteur SSL, définition des certificat et clé, et ajout des variables d’environnement propres a l’utilisation du moteur SSL.

Maintenant, peut-être que vous vous demander où mettre cet hôte virtuel ? Hé ben vous pouvez le mettre dans httpd-vhosts.conf, comme ceux qui étaient déjà prévus pour HTTP.

Pourquoi n’a-t’on pas mis là l’hôte virtuel pour https://localhost/ ? Et pourquoi ne met-on pas notre nouvel hôte virtuel au même endroit que celui pour https://localhost/ ?

L’hôte virtuel pour https://localhost/ est déjà défini dans httpd-ssl.conf. Souvenez-vous, un certificat SSL est à lier avec un hôte virtuel, et on a tout fait pour localhost lors de l’exemple, c’est donc bien qu’on en avait un.
En revanche, il vaut mieux ne pas mettre les hôtes virtuels dans le httpd-ssl.conf dans la mesure où celui-ci est prévu pour la configuration du module SSL en lui-même, ce dont ne font pas partie les hôtes virtuels. localhost étant un hôte virtuel par défaut, il est bien lié à la configuration de SSL. D’autre part, si vous veniez à supprimer l’un ou l’autre nom de domaine, il faudrait le répercuter sur les deux hôtes virtuels. Autant qu’ils soient au même endroit pour éviter d’oublier l’un ou l’autre.

Mieux vaut mettre les hôtes virtuels pour le même domaine dans le même fichier, et l’un à la suite de l’autre


  1. %WAMPDIR% est à remplacer par le chemin d’installation de WAMP
  2. %APACHE_VERSION% est à remplacer par la version d’Apache, avec les points de séparation
  3. %WAMPDIR% est à remplacer par le chemin d’installation de WAMP
  4. %APACHE_VERSION% est à remplacer par la version d’Apache, avec les points de séparation

Au final, WAMP s’avère donc être une solution souple et néanmoins sécuritaire. La seule chose qu’il n’est pas possible de faire désormais, c’est d’avoir deux versions de PHP différentes pour deux sites qui fonctionnent en parallèle. Mais si on y réfléchit, il y a une solution : installer une version x86 et une version 64 de WAMP ! Si les hôtes virtuels sont bien paramétrés, vous pourrez avoir deux serveurs simultanément sur votre machine !