WAMP Windows Apache MySQL PHP

Sous Windows 10 - Mars 2019



Installation d'Apache

Si le processeur de votre machine de développement est en 64 bits, Télécharger une version X64. VC14 ou VC15: httpd-2.4.37-o102p-x64-vc14.zip httpd-2.4.39-win64-VC15.zip [thread safe]

Configuration d'Apache

Dans conf/httpd.conf ajouter
    Define SRVROOT "D:\Lab\Apache24"
    ServerRoot "${SRVROOT}"
Tester http://127.0.0.1 ou http://localhost/ Le slash final indique à Apache qu'on veut la ressource précisée par la directive DirectoryIndex. Si ça fonctionne, modifier DocumentRoot pour définir le répertoire de publication. Ce dossier de publication n'est pas dans le dossier Apache24, pour pouvoir tester une autre version du serveur web sans toucher aux fichiers.

PHP

Télécharger une version X64 et avec le même VC qu'Apache php-7.1.24-Win32-VC14-x64.zip (pour VC15: php-7.3.4-Win32-VC15-x64.zip) conf/httpd.conf ajouter
  LoadModule php7_module "D:\Lab\php-7.1.24-Win32-VC14-x64\php7apache2_4.dll"
  <IfModule php7_module>
    PHPIniDir "D:\Lab\Apache24\bin"
    AddType text/html .php
    AddHandler application/x-httpd-php .php
  </IfModule>
Créer info.php
<?php
    phpinfo();
?>
et tester http://127.0.0.1/info.php Il indique le chemin du ini qui est chargé, et les modules chargés Pour rechercher automatiquement index.php, changer
    <IfModule dir_module>
        DirectoryIndex index.html
    </IfModule>
    en
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
Dans cette configuration, quand on demandera un dossier avec un slash final, Apache recherchera d'abord index.html, et s'il ne le trouve pas recherchera index.php. S'il ne le trouve pas il listera le contenu du dossier si Indexes est activé. Sinon produira une erreur 403 forbidden.

Charger une extension PHP

GD ou Curl Vérifier qu'elle est dans le dossier php/ext Ouvrir php.ini, rechercher gd. Sous Windows mettre l'extension .dll:
extension=php_gd2.dll
La version VC15 n'est pas compilée avec Curl, ou alors j'ai mal vu.

Régler la date/heure

Je viens de voir que les dates ont un décalage de 2 heures.
<?php
  echo date("d/m/Y H:i", time());
?>
Ajouter dans php.ini
	date.timezone = Europe/Paris
Sinon si pas d'accès au fichier ini faire avec date_default_timezone_set()
<?php
  echo date("d/m/Y H:i", time());
  date_default_timezone_set('Europe/Paris');
  echo date("d/m/Y H:i", time());
?>

MySQL

Télécharger et configurer en version Service. Pour configurer le service, ouvrir une commande DOS et taper
	C:\Windows\System32>services.msc

	
	
(ou depuis le Apache Monitor) Noter le mot de passe admin, ajouter un user

PHPMyAdmin

Télécharger https://www.phpmyadmin.net/downloads/ Extraire dans htdocs et renommer phpMyAdmin tester http://localhost/phpMyAdmin il se plaint que mysqli n'est pas chargée. Dans php.ini
mettre ligne 732
      extension_dir = "D:/Lab/php-7.1.24-Win32-VC14-x64/ext/"
    et ligne 898
      extension=php_mysqli.dll
    
Redémarrer le serveur web et tester http://127.0.0.1/info.php http://127.0.0.1/phpMyAdmin Copier config.sample.inc.php en config.inc.php
<?php
 $i = 0;
  $i++;
  $cfg['Servers'][$i]['auth_type'] = 'cookie';
  $cfg['Servers'][$i]['host'] = '127.0.0.1';
  $cfg['Servers'][$i]['compress'] = false;
  $cfg['Servers'][$i]['AllowNoPassword'] = false;

  $cfg['Servers'][$i]['user']          = 'root';
  $cfg['Servers'][$i]['password']      = 'le-mot-de-passe-root';
}
?>
Maintenant se connecter pour créer une base et un utilisateur:
   D:\Lab\mysql-8.0.13-winx64\bin>mysql -u root p
   password: *****
   Welcome to the MySQL monitor.  Commands end with ; or \g.
   mysql> CREATE DATABASE bert;
   mysql> CREATE USER 'joe'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mdp';
   Query OK, 0 rows affected (0.09 sec)
   mysql> GRANT ALL ON bert.* TO 'bert'@'localhost';
   Query OK, 0 rows affected (0.02 sec)
   mysql> exit;
   Bye

Tester http://127.0.0.1/phpMyAdmin Autres commandes SQL
mysql> USE bert;
mysql> SHOW DATABASES;
create table;
SHOW TABLES;
 DESCRIBE `table`;
-- ou
 DESCRIBE `base`.`table`;

Accès au serveur

Si vous avez un autre ordinateur sur le réseau local, ou si un smartphone voulait se connecter au serveur. Ouvrir une fenêtre DOS et saisir ipconfig. L'adresse de la machine peut être notée.
C:\Windows\System32>ipconfig

Configuration IP de Windows

Carte Ethernet Ethernet :

   Suffixe DNS propre à la connexion. . . : home
   Adresse IPv6. . . . . . . . . . . . . .: 2a01:cb1c:41f:d900:819d:49d3:a44e:de95
   Adresse IPv6 temporaire . . . . . . . .: 2a01:cb1c:41f:d900:5547:572f:e858:56f3
   Adresse IPv6 de liaison locale. . . . .: fe80::819d:49d3:a44e:de95%8
   Adresse IPv4. . . . . . . . . . . . . .: 192.168.1.16
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
   Passerelle par défaut. . . . . . . . . : fe80::4265:a3ff:fefd:da36%8
                                       192.168.1.1

Carte réseau sans fil Wi-Fi :

   Statut du média. . . . . . . . . . . . : Média déconnecté
   Suffixe DNS propre à la connexion. . . : home

Carte réseau sans fil Connexion au réseau local* 1 :

   Statut du média. . . . . . . . . . . . : Média déconnecté
   Suffixe DNS propre à la connexion. . . :

Carte réseau sans fil Connexion au réseau local* 2 :

   Statut du média. . . . . . . . . . . . : Média déconnecté
   Suffixe DNS propre à la connexion. . . :

Carte Ethernet Connexion réseau Bluetooth 2 :

   Statut du média. . . . . . . . . . . . : Média déconnecté
   Suffixe DNS propre à la connexion. . . :
Pour y accéder: http://192.168.1.16 Pour s'y connecter depuis l'extérieur du réseau local: configurer le routeur pour que les requêtes entrantes sur le port 80 soient transférées sur cette machine, probablement en IP fixe.

Configurer des Virtual Hosts

Virtual Host c'est plusieurs serveurs sur une seule IP. D'ou le nom de serveur virtuel. Si sur le serveur de prod des sous-domaines sont utilisés, il vaut mieux développer en local également avec des sous-domaines. Clic droit sur Notepad, exécuter en tant qu'admin Ouvrir C:\Windows\System32\drivers\etc\hosts Ajouter
127.0.0.1 dev.masta
127.0.0.1 c.masta
127.0.0.1 login.masta.dev
127.0.0.1 2eguerre.masta
127.0.0.1 vietnam.masta
127.0.0.1 carnetsdevol.masta
127.0.0.1 poudrenoire.masta
Ne pas mettre localhost, il est déja pris en compte. Cette étape permet de simuler au maximum le comportement du serveur de prod. Et éviter une requête DNS pour trouver l'IP du serveur demandé. Dans httpd.conf décommenter
Include conf/extra/httpd-vhosts.conf
Dans conf/extra/httpd-vhosts.conf ajouter:
<VirtualHost localhost:80>
   DocumentRoot D:/Lab/web/htdocs
   ServerName localhost
</VirtualHost>

<VirtualHost poudrenoire.masta:80>
    ServerAdmin webmaster@poudrenoire.masta
    DocumentRoot "D:\Lab\web\htdocs\poudrenoire"
    ServerName poudrenoire.masta
    <Directory "D:\Lab\web\htdocs\poudrenoire">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory> 
</VirtualHost>

<VirtualHost 2eguerre.masta:80>
    ServerAdmin webmaster@2eguerre.masta
    DocumentRoot "D:\Lab\web\htdocs\2e-guerre"
    ServerName 2eguerre.masta
    <Directory "D:\Lab\web\htdocs\2e-guerre">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory> 
</VirtualHost>

<VirtualHost programming.masta:80>
    ServerAdmin webmaster@programming.masta
    DocumentRoot "D:\Lab\web\htdocs\programming"
    ServerName programming.masta
    <Directory "D:\Lab\web\htdocs\programming">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory> 
</VirtualHost>

<VirtualHost vietnam.masta:80>
    ServerAdmin webmaster@vietnam.masta
    DocumentRoot "D:\Lab\web\htdocs\sites\vietnam"
    ServerName vietnam.masta
    <Directory "D:\Lab\web\htdocs\sites\vietnam">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory> 
</VirtualHost>

<VirtualHost carnetsdevol.masta:80>
    ServerAdmin webmaster@carnetsdevol.masta
    DocumentRoot "D:\Lab\web\htdocs\sites\carnetsdevol"
    ServerName carnetsdevol.masta
    <Directory "D:\Lab\web\htdocs\sites\carnetsdevol">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory> 
</VirtualHost>
DocumentRoot peut être n'importe quel dossier, pas forcément un sous-dossier du répertoire de publication principal. Sachant celà une page ne peut pas accéder aux ressources des autres dossiers en y accédant par un chemin relatif ../autredossier elle doit y accéder par le protocole http(s). AllowOverride None Empêche aux fichiers htaccess de modifier la configuration initiale. Mettre AllowOverride AuthConfig FileInfo Authconfig pour AllowOverride de la configuration d'authentification. Fileinfo pour AllowOverride de Errordocument Pas besoin de redémarrer l'ordinateur, Apache suffira. Mort de rire ceux qui demandent sur les forums d'aide de redémarrer l'ordinateur: le fichier host et htaccess sont lus sur le disque pour chaque requête. Vérifier que localhost fonctionne encore: http://127.0.0.1 http://localhost Tester le domaine de développement: http://dev.masta Tester un sous-domaine de développement: http://c.masta Pour la prod c'est presque la même URL: http://c.masta.fr Vérifier la configuration Vhosts avec
D:\Lab\web\Apache24\bin>httpd -S