Installation et configuration d'un serveur Web Apache 2.2, PHP 5, MySQL 5.0 et phpMyAdmin pour Windows

Ce tutoriel devrait vous permettre d'installer et de configurer un serveur web Apache avec PHP et MySQL. Il n'est pas une documentation complète sur la configuration d'Apache, mais il doit vous permettre d'obtenir un serveur en état de marche. Vous trouverez à la fin de ce guide, une rubrique concernant l'administration de MySQL et l'installation de l'outil phpMyAdmin pour administrer simplement vos bases. Vous trouverez également une rubrique expliquant quelques directives d'Apache.

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Vous pouvez télécharger les versions utilisées dans ce guide :

Si les liens précédents ne fonctionnent plus, vous pouvez les télécharger ici :

Paramètres d'installation
Ce tutoriel utilise ses valeurs par défaut, mais vous pouvez les modifier à votre convenance, cliquez sur Valider lorsque les paramètres sont corrects.
Évitez de mettre des espaces dans les chemins, cela peut être la cause d'une installation non fonctionnelle.
Système d'exploitation :
Réinitialiser
Petit lien pour que les moteurs de recherche puissent passer le formulaire : Installation par défaut d'apache, php, mysql, et phpmyadmin sous windows.

II. Installation du serveur Apache 2.2.11

Avant toute chose, le protocole TCP/IP doit être installé et fonctionnel. Si vous possédez Windows NT 4, il est fortement recommandé que le Service Pack 6 soit installé.

Téléchargez si ce n'est déjà fait Apache 2.2.11, cliquez deux fois sur le fichier c:\www\apache-2.2.11-win32-x86-openssl-0.9.8i.msi et suivez les instructions.

Sélectionnez le type d'installation : typical.

Image non disponible

À ce stade de l'installation, utilisez ces paramètres :

  • 1erchamp : localdomain
  • 2echamp : localhost.localdomain
  • 3echamp : vous@votredomaine.com

Installez le serveur en tant que Service. Indiquez le répertoire d'installation : c:\www\apache-2.2\

Image non disponible

III. Configuration du serveur Apache 2.2.11

Il est temps de bidouiller dans le fichier de configuration d'Apache, vous verrez que la configuration est en fait, très simple. Éditez à l'aide du bloc-notes le fichier c:\www\apache-2.2\conf\httpd.conf.

III-A. ServerAdmin

Cette directive indique l'adresse électronique de l'administrateur du serveur Web. Elle apparaîtra lors d'éventuelles erreurs. Vérifiez que cette ligne est bien présente : ServerAdmin vous@votredomaine.com.

III-B. ServerName

Cette directive permet de définir un nom pour votre serveur. Vérifiez qu'une de ces deux lignes est bien présente : ServerName localhost.localdomain ou ServerName localhost.localdomain:80. Si la ligne est commentée (un dièse # au début), décommentez-la. Vous pourrez accéder à votre serveur en tapant dans votre navigateur Internet l'adresse http://127.0.0.1.

Si vous éditez le fichier c:\winnt\system32\drivers\etc\hosts et que vous ajoutez la ligne 127.0.0.1  localhost.localdomain, vous pourrez alors accéder au serveur en tapant dans le navigateur, l'adresse http://localhost.localdomain. Ainsi, vous pourrez ajouter des sous-domaines et gérer des hôtes virtuels avec Apache.

III-C. DocumentRoot

Cette directive spécifie le répertoire racine de votre site. Seules les pages présentes dans ce dossier seront interprétées par le serveur. Remplacez la ligne DocumentRoot "c:\www\apache-2.2/htdocs" par DocumentRoot "c:\www\monsite".

III-D. <Directory></Directory>

Entre ces balises, vous pouvez spécifier les restrictions d'accès des répertoires de votre site. Remplacez la ligne <Directory "c:\www\apache-2.2/htdocs"> par <Directory "c:\www\monsite.

Enregistrer puis quitter.

III-E. Vérification de la syntaxe du fichier httpd.conf

Le répertoire c:\www\monsite doit être créé avant de tester la syntaxe du fichier de configuration. Cliquez sur Démarrer/Programmes/Apache HTTP Server/Configure Apache Server/Test Configuration. Si vous n'obtenez pas de message d'erreur, tout est OK ! Sinon reprenez l'édition du fichier httpd.conf. Au pire, si vous ne savez plus où vous en êtes, dupliquez le fichier de sauvegarde c:\www\apache-2.2\conf\original\httpd.conf en c:\www\apache-2.2\conf\httpd.conf puis reprenez la section Configuration du serveur Apache 2.2.11

IV. Test du serveur Apache 2.2.11

Vous allez maintenant tester votre serveur. Créez une page nommée test.html dans le dossier c:\www\monsite et insérez-y ces quelques lignes :

 
Sélectionnez
<html>
 <head>
  <title>ma première page html</title>
 </head>
 <body>
  <div style="text-align:center;font-size:24px;font-weight:bold;">Ça marche !!!</div>
 </body>
</html>

Une fois installé, le serveur Apache démarre automatiquement. Si ce n'est pas le cas, vous pouvez le faire soit dans le menu Démarrer/Programmes/Apache HTTP Server/Control Apache Server/Start, soit directement dans la barre des tâches à l'aide de Image non disponible, un simple clic sur cette icône affiche le menu de contrôle qui permet de démarrer, redémarrer ou arrêter le serveur Apache. S'il est déjà démarré, vous devrez le redémarrer pour que les changements soient pris en compte.

Ensuite, lancez votre navigateur Mozilla, Internet Explorer, Opéra ou autre, et dans la barre d'adresse, tapez http://127.0.0.1/test.html.

Vous devriez voir un gros « Ça marche !!! » au milieu de l'écran, ce qui signifie que votre serveur fonctionne. Si vous n'entrez pas l'adresse entièrement, vous risquez d'obtenir un message d'erreur. En effet, il se peut que l'accès au contenu du répertoire soit interdit. Nous verrons plus tard comment corriger cela.

V. Installation de PHP 5.2.8

Pendant l'installation, il est recommandé de stopper le serveur Démarrer/Programmes/Apache HTTP Server/Control Apache Server/Stop.

D'après la documentation de PHP, l'installation manuelle est le meilleur choix pour avoir un système sécurisé et optimisé. Nous utiliserons PHP en tant que module d'Apache. Récupérez PHP 5.2.8 si ce n'est déjà fait. Décompressez php-5.2.8-Win32.zip, il est possible qu'un sous répertoire \php-5.2.8-Win32 soit créé.

Placez-vous alors dans ce sous-répertoire et copiez tout son contenu dans c:\www\php-5.

Dupliquez le fichier c:\www\php-5\php.ini-recommended , renommez-le en php.ini et éditez-le. Recherchez le bout de code extension_dir = "./" et modifiez en extension_dir = "c:\www\php-5/ext/".

register_globals : cette option définie par défaut à Off sert à activer l'enregistrement des variables EGPCS (Environnement, GET, POST, Cookie, Serveur) en tant que variables globales. Voyez les différences entre ces deux configurations.

V-A. register_globals = Off

Avantage : Améliore la sécurité de vos scripts.
Exemple : fichier essai.php.

 
Sélectionnez
<html>
 <head>
  <title>register_globals défini à Off</title>
 </head>
 <body>
  <?php
   echo $_GET['nom'];
  ?>
 </body>
</html>

Appel du script : http://127.0.0.1/essai.php?nom=jacky.

V-B. register_globals = On

Avantage : améliore la facilité d'écriture des scripts.
Exemple : fichier essai.php.

 
Sélectionnez
<html>
 <head>
  <title>register_globals défini à On</title>
 </head>
 <body>
  <?php
   echo $nom;
  ?>
 </body>
</html>

Appel du script : http://127.0.0.1/essai.php?nom=jacky.

Vous remarquez bien sûr que la différence se trouve au niveau de l'appel des variables. Libre à vous donc de choisir celle qui vous conviendra le mieux. Sachez que vous pourrez changer à tout moment. Si vous débutez et que, pour vous, la sécurité est peu importante, mettez cette option à On, au contraire si vous souhaitez que la sécurité soit plus présente ou que vous voulez vous imposer une certaine rigueur dans la programmation en PHP, laissez cette option à Off. Pour modifier ces paramètres, recherchez la chaîne register_globals = Off.

Laissez à Off ou changez en On suivant vos besoins.

Afin de pouvoir utiliser les sessions, créez le répertoire c:\www\php-5\sessions puis dans le fichier php.ini recherchez la ligne ;session.save_path = "/tmp" et modifiez en session.save_path = "c:\www\php-5/sessions/".

Afin que PHP 5 puisse communiquer avec le serveur MySQL, il convient de décommenter la ligne ;extension=php_mysqli.dll qui devient donc extension=php_mysqli.dll. Il s'agit d'une extension améliorée pour MySQL. Pour plus d'informations : Extension MySQL améliorée. Pendant que nous y sommes, nous allons activer certaines extensions utiles (il suffit d'enlever le « ; » en début de ligne). Décommentez extension=php_bz2.dll qui sert à la compression et décompression à la volée. Décommentez extension=php_gd2.dll utile pour générer des images. Décommentez également extension=php_mbstring.dll et extension=php_mcrypt.dll indispensables à phpMyAdmin pour l'encodage des caractères.

Enregistrez puis quittez.

Éditez de nouveau le fichier c:\www\apache-2.2\conf\httpd.conf.

Recherchez la série de lignes commençant par #LoadModule et ajoutez à la suite LoadModule php5_module "c:\www\php-5/php5apache2_2.dll".

Cette ligne sert à charger en mémoire le module de PHP pour Apache. # indique qu'il s'agit d'un commentaire.

Ajoutez à la fin du fichier AddType application/x-httpd-php .php .inc. Cette ligne sert à spécifier quelles sont les extensions qui seront interprétées par PHP, vous pouvez en ajouter autant que vous le voulez.

Ajoutez à la fin du fichier PHPIniDir "c:\www\php-5".

Afin de prendre en compte l'extension .php en ce qui concerne les pages d'index, cherchez la ligne DirectoryIndex index.html et modifiez-la en DirectoryIndex index.php index.html index.htm.

Enregistrez puis quittez.

Ajoutez le répertoire de PHP 5 dans le PATH. En passant, on ajoutera celui des exécutables d'Apache. Le PATH est une variable d'environnement qui sert à spécifier des répertoires dont le contenu peut être accessible depuis n'importe quel autre répertoire, rien qu'en tapant le nom du fichier. Lorsque vous utilisez la commande exécuter, vous tapez cmd et non le chemin complet c:\winnt\system32\cmd.exe, vous utilisez le PATH. Il existe aussi le PATHEXT, celui-ci sert aux extensions : vous tapez cmd, alors que l'exécutable se nomme cmd.exe.

Pour cela vous devez posséder les droits nécessaires. Faites un clic droit sur le poste de travail (Ordinateur sous Vista) DirectoryIndex index.php index.html index.htm puis dans le menu contextuel qui apparaît, cliquez sur propriétés. Cliquez ensuite sur l'onglet Avancé (Paramètres système avancés sous Vista) puis sur Variables d'environnement. Dans la partie variables système, sélectionnez la ligne où figure PATH puis cliquez sur le bouton modifier. Si cette ligne n'apparaît pas, cliquez sur créer et donnez comme nom de variable PATH. Dans les deux cas, ajoutez à la valeur de la variable c:\www\php-5;c:\www\apache-2.2\bin;.

Note : tous les chemins doivent être terminés d'un « ; » (point-virgule). Si un chemin possède un ou plusieurs espaces, entourez-le de deux « " ». Exemple : "c:\Program Files\Apache 2.2"; Validez en cliquant sur OK et le tour est joué.

Et n'oubliez pas de redémarrer la machine pour prendre en compte la modification de la variable d'environnement PATH.

VI. Test de PHP 5.2.8

Nous allons vérifier que le module PHP est bien chargé par Apache. Créez une page nommée test.php dans le dossier c:\www\monsite et insérez-y ces quelques lignes :

 
Sélectionnez
<?php
 phpinfo();
?>

Ensuite, lancez votre navigateur et dans la barre d'adresse, tapez http://127.0.0.1/test.php. Vous devez obtenir la page d'information de la configuration de PHP 5.2.8.

VII. Installation du serveur MySQL 5.1.31

Après avoir récupéré MySQL 5.1.31, exécutez mysql-5.1.31-win32.msi et suivez les instructions. Vous devez disposer des droits d'administrateur pour pouvoir installer ce programme. Sélectionnez le type d'installation : custom.

Indiquez le répertoire d'installation : c:\www\mysql-5.0\.

Image non disponible

À la fin de l'installation, le programme vous propose d'utiliser l'assistant de configuration. Utilisez-le en cochant la case prévue à cet effet. Si cet assistant ne se lance pas automatiquement (ça m'est arrivé une fois), vous pouvez le faire ici : Démarrer/Programmes/MySQL/MySQL Server Instance Config Wizard. Un premier écran vous demande si vous voulez effectuer la configuration en mode avancé ou en mode standard. Choisissez la première :

Image non disponible

Le programme vous demande de choisir quel type de machine vous utilisez : cochez Developper machine sauf si vous travaillez sur un serveur dédié.

Image non disponible

Maintenant vous allez choisir quel type d'utilisation vous allez faire de MySQL. Le premier choix me paraît correct, mais à vous de décider…

Image non disponible

Choisissez maintenant le répertoire où vous allez stocker les tables de type InnoDB. À vous de décider, la configuration par défaut pourra très bien convenir.

Image non disponible

Maintenant, indiquez le nombre de connexions simultanées que devra supporter le serveur. Pas la peine d'exagérer surtout si vous êtes le seul à l'utiliser. Plus le nombre sera élevé, plus la mémoire sera utilisée.

Image non disponible

Activez les connexions en TCP/IP et indiquez le port par lequel le client MySQL devra se connecter.

Image non disponible

Choisissez l'encodage par défaut des caractères. Le mode standard est parfait pour les pays d'Europe. Le second supporte toutes les langues. Le troisième vous permet de choisir un autre jeu de caractères.

Image non disponible

Choisissez d'installer le service MySQL et de le démarrer automatiquement. Indiquez que vous voulez inclure le répertoire des exécutables MySQL dans le PATH.

Image non disponible

Enfin, choisissez un mot de passe. À vous de décider si vous voulez autoriser une connexion distante en root.

Image non disponible

Validez, l'assistant va alors générer automatiquement le fichier de configuration c:\www\mysql-5.0\my.ini.

VIII. Administration du serveur MySQL 5.1.31

Pour la suite de ce tutoriel, nous allons utiliser l'invite de commande MS-DOS Démarrer/Exécuter puis tapez cmd puis Entrée. Normalement, vous avez choisi de mettre le chemin des exécutables dans le PATH, si ce n'est pas le cas, faites-le comme précédemment. Redémarrez la machine pour que les modifications prennent effet.

Nous allons ensuite nous connecter en tant que root (le super utilisateur). -u signifie user (utilisateur en anglais). Ce paramètre sert à spécifier sous quel nom nous nous identifions, dans notre cas, nous nous connectons sous le nom de root. -p indique que l'on va se connecter à l'aide d'un mot de passe. Vous indiquerez celui que vous avez défini grâce à l'assistant de configuration de MySQL.

 
Sélectionnez
C:\>mysql -u root -p
Enter password: **************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version : 4.1.11
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

Nous sommes maintenant connectés en tant que root. Nous allons passer en revue quelques commandes utiles.

Pour lister toutes les bases présentes sur le serveur, vous ne voyez que celles auxquelles vous avez accès :

 
Sélectionnez
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.53 sec)

mysql>

Pour sélectionner une base, dans notre cas, on choisit la base mysql :

 
Sélectionnez
mysql> USE mysql;
Database changed
mysql>

Pour lister toutes les tables présentes sur la base choisie, vous ne voyez que celles auxquelles vous avez accès :

 
Sélectionnez
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| proc_priv                 |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
17 rows in set (0.06 sec)

mysql>

Pour afficher la structure d'une table, dans notre cas, on choisit la table user :

 
Sélectionnez
mysql> DESCRIBE user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     | NULL    |       |
| x509_issuer           | blob                              | NO   |     | NULL    |       |
| x509_subject          | blob                              | NO   |     | NULL    |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
37 rows in set (0.00 sec)

mysql>

Les mots de passe sont contenus dans la table user, les deux champs auxquels nous allons nous intéresser sont les champs user et password.

Vous pouvez faire un SELECT * FROM user; pour voir son contenu. Bien que vous ayez déjà un mot de passe root, voici la démarche à suivre si vous voulez le changer. Par exemple, donnons à root le mot de passe motsecret.

 
Sélectionnez
mysql> UPDATE user
    -> SET password = PASSWORD('motsecret')
    -> WHERE user = 'root';
Query OK, 2 rows affected (0.78 sec)
Rows matched: 2 Changed: 2 Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>

Après avoir mis à jour la table user, il faut que MySQL recharge les droits en mémoire, c'est avec la commande FLUSH PRIVILEGES; que l'on demande à MySQL de les recharger.

Explications : lorsque vous vous connectez à MySQL, le mot de passe que vous saisissez est crypté puis comparé à celui présent dans la base. C'est pour cela que l'on doit le crypter lors de son insertion avec la fonction PASSWORD(), si vous ne le faites pas, vous ne pourrez jamais vous connecter. Vous pouvez voir comment sont stockés les mots de passe via la commande suivante.

 
Sélectionnez
mysql> SELECT user, host, password
    -> FROM user
    -> WHERE user = 'root';
+-------------+-----------+-------------------------------------------+
| user        | host      | password                                  |
+-------------+-----------+-------------------------------------------+
| root        | localhost | *1D441F11F856EFC0CA58742E2AE0BF70F94351D3 |
+-------------+-----------+-------------------------------------------+
1 rows in set (0.00 sec)

mysql>

Les mots de passe ne sont pas décryptables.

Nous allons maintenant créer une base giminik_db ainsi qu'un utilisateur qui disposera de tous les droits sur sa base. L'utilisateur sera nommé giminik et son mot de passe matthieu.

 
Sélectionnez
mysql> CREATE DATABASE giminik_db;
Query OK, 1 rows affected (0.03 sec)

mysql> GRANT ALL PRIVILEGES
    -> ON `giminik\_db`.*
    -> TO giminik@localhost
    -> IDENTIFIED BY 'matthieu';
Query OK, 0 rows affected (0.00 sec)

mysql>

Les guillemets simples utilisés « ` » sont obtenus avec la combinaison de touches ALT GR + 7, c'est très important pour ne pas voir un message d'erreur. Le slash devant le underscore « \_ » sert à protéger le caractère « _ » qui est utilisé en tant que joker. Plus d'information sur la page de documentation du site de MySQL. Faites une recherche dans la page sur le mot « joker ».

Un utilisateur possède maintenant des droits sur une base. Voici quelques explications : GRANT détaille les commandes autorisées. ON indique quelles sont les bases concernées sous la forme base.table où base et table peuvent être soit un nom soit * qui signifie toutes. *.* signifie toutes les tables de toutes les bases. Dans notre cas, cela concerne toutes les tables de la base giminik_db. TO indique le nom d'utilisateur ainsi que son domaine de connexion (l'endroit à partir duquel il se connecte). IDENTIFIED BY indique et crypte le mot de passe tout comme le fait PASSWORD().

Il n'est pas nécessaire de faire un FLUSH PRIVILEGES; car GRANT est une commande spécialement conçue pour gérer les droits qui sont immédiatement mis à jour.

Ensuite, déconnectez-vous.

 
Sélectionnez
mysql> EXIT;
Bye

C:\>

L'utilisateur giminik peut maintenant se connecter à la base giminik_db et y créer des tables, voir les tables ainsi que leur structure et leur contenu.

 
Sélectionnez
C:\>mysql -u giminik -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version 4.1.11

Type 'help' or '\h' for help. Type '\c' to clear the buffer.

mysql> USE giminik_db;
Database changed
mysql> CREATE TABLE nom (
    -> idNom integer unsigned zerofill auto_increment,
    -> nom varchar(30) UNIQUE,
    -> PRIMARY KEY (idNom)
    -> );
Query OK, 0 rows affected (0.50 sec)

mysql> SHOW TABLES;
+----------------------+
| Tables_in_giminik_db |
+----------------------+
| nom                  |
+----------------------+
1 rows in set (0.12 sec)

mysql> DESCRIBE nom;
+-------+---------------------------+------+-----+---------+----------------+
| Field | Type                      | Null | Key | Default | Extra          |
+-------+---------------------------+------+-----+---------+----------------+
| idNom | int(10) unsigned zerofill | NO   | PRI | NULL    | auto_increment |
| nom   | varchar(30)               | YES  | MUL | NULL    |                |
+-------+---------------------------+------+-----+---------+----------------+
2 rows in set (0.40 sec)

mysql> INSERT INTO nom (nom)
    -> VALUES ('dupont');
Query OK, 1 rows affected (0.46 sec)

mysql> INSERT INTO nom (nom)
    -> VALUES ('durant');
Query OK, 1 rows affected (0.39)

mysql> SELECT * FROM nom;
+------------+--------+
| idNom      | nom    |
+------------|--------|
| 0000000001 | dupont |
| 0000000002 | durant |
+------------+--------+
2 rows in set (0.44 sec)

mysql>

Vous savez maintenant comment il faut procéder pour créer des utilisateurs et leur affecter une ou plusieurs bases. Il est tout de même plus pratique d'utiliser un outil d'administration tel que phpMyAdmin pour gérer les bases et créer les tables, voire gérer les utilisateurs.

IX. Installation de phpMyAdmin 3.1.2

Après avoir téléchargé phpMyAdmin 3.1.2, décompressez phpMyAdmin-3.1.2-all-languages.zip, un sous-répertoire \phpMyAdmin-3.1.2-all-languages sera automatiquement créé. Placez-vous dans ce sous-répertoire et copiez tout son contenu dans c:\www\monsite\phpmyadmin ou un autre sous-répertoire de c:\www\monsite, nous supposerons que vous prendrez le même nom que celui utilisé dans ce cours.

Dupliquez le fichier c:\www\monsite\phpmyadmin\config.sample.inc.php en c:\www\monsite\phpmyadmin\config.inc.php. Éditez ce dernier avec le bloc-notes.

La première chose à faire est d'indiquer à phpMyAdmin que nous utilisons l'extension mysqli (la même que nous avons configurée dans le php.ini), il suffit de donner à la variable $cfg['Servers'][$i]['extension'] la valeur 'mysqli'.

Comme nous utilisons la méthode d'authentification cookie, il est nécessaire de renseigner la variable $cfg['blowfish_secret']. Il s'agit d'une clé de cryptage pour la génération des cookies. Saisissez une valeur au hasard, contenant des lettres et des chiffres. La longueur de cette chaine ne doit pas excéder 46 caractères.

Pour activer les fonctionnalités additionnelles de phpmyadmin, il est nécessaire de décommenter les variables suivantes :

  • $cfg['Servers'][$i]['controluser'] ;
  • $cfg['Servers'][$i]['controlpass'] ;
  • $cfg['Servers'][$i]['pmadb'] ;
  • $cfg['Servers'][$i]['bookmarktable'] ;
  • $cfg['Servers'][$i]['relation'] ;
  • $cfg['Servers'][$i]['table_info'] ;
  • $cfg['Servers'][$i]['table_coords'] ;
  • $cfg['Servers'][$i]['pdf_pages'] ;
  • $cfg['Servers'][$i]['column_info'] ;
  • $cfg['Servers'][$i]['history'] ;
  • $cfg['Servers'][$i]['designer_coords'].

Sauvegardez et fermez le fichier. Voici à quoi il devrait ressembler :

 
Sélectionnez
<?php

$cfg['blowfish_secret'] = 'alkdlfgdfkgkjzkjrqmdaadlkkfsfsfsk';
$i = 0;
$i++;

$cfg['Servers'][$i]['auth_type'] = 'cookie';

$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;

$cfg['Servers'][$i]['extension'] = 'mysqli';

$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';

$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';

$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';

?>

Lancez votre navigateur et tapez http://127.0.0.1/phpMyAdmin/, une fenêtre d'authentification s'affiche. Entrez votre nom d'utilisateur root, puis votre mot de passe correspondant (celui défini à l'installation de MySQL). Une fois dans l'interface de phpMyAdmin, dans la colonne de gauche, vous voyez une icône fenêtre SQL, ouvrez-la, et dans cette nouvelle fenêtre, choisissez importer les fichiers, cliquez sur parcourir, et allez chercher le fichier c:\www\monsite\phpmyadmin\scripts\create_tables_mysql_4_1_2+.sql puis exécuter.

Il reste à créer un utilisateur dit controluser nommé pma ayant pmapass comme mot de passe. Cet utilisateur a les droits SELECT, INSERT, UPDATE, DELETE sur toutes les tables de la base phpMyAdmin. Exécutez la commande suivante dans la fenêtre SQL.

 
Sélectionnez
GRANT SELECT, INSERT, DELETE, UPDATE ON `phpmyadmin`.* TO 'pma'@localhost IDENTIFIED BY 'pmapass';

Une fois que toutes ces étapes ont été faites, les nouvelles fonctionnalités suivantes sont activées : signets sur vos requêtes préférées, commentaires sur chaque colonne, historique des requêtes SQL effectuées, mise en place de relations entre les tables, génération du modèle graphique de la base en PDF, transformation des contenus de champ et encore plus…

Déconnectez-vous de phpMyAdmin.

X. Test de phpMyAdmin 3.1.2

Nous allons maintenant nous connecter. Ouvrez votre navigateur Internet et tapez l'adresse http://127.0.0.1/phpMyAdmin/index.php.

Vous pouvez remplacer 127.0.0.1 par l'adresse IP de la machine ou par votre nom de domaine DNS et ainsi y accéder à distance. La boite d'authentification HTTP s'affiche, entrez alors votre nom d'utilisateur et votre mot de passe.

Image non disponible

Si votre nom et mot de passe apparaissent dans la table user de la base mysql, vous serez alors connecté avec les tables sur lesquelles vous avez des droits. Dans le cas contraire, vous serez redirigé vers une page d'erreur.

Afin de vous faire découvrir les nouvelles fonctionnalités de cet outil, nous allons faire un petit exercice. Une fois connecté, cliquez sur Image non disponible juste au-dessus de ce menu. En mode SQL de phpMyAdmin, entrez puis exécutez ces ordres de création de tables (pas besoin de commenter, c'est très simple.)

Image non disponible
 
Sélectionnez
CREATE TABLE pays (
  idPays char(2) NOT NULL default '',
  libelle varchar(20) NOT NULL default '',
  PRIMARY KEY  (idPays),
  UNIQUE KEY libelle (libelle)
);

INSERT INTO pays (idPays, libelle) 
  VALUES ('en', 'Angleterre');
INSERT INTO pays (idPays, libelle) 
  VALUES ('fr', 'France');

CREATE TABLE personne (
  idPersonne int(11) NOT NULL default '0',
  nomPersonne varchar(50) NOT NULL default '',
  prenomPersonne varchar(50) NOT NULL default '',
  idPays char(2) NOT NULL default '',
  idVille int(11) NOT NULL default '0',
  PRIMARY KEY  (idPersonne)
);

INSERT INTO personne (idPersonne, nomPersonne, prenomPersonne, idPays, idVille) 
  VALUES (1, 'ICE', 'Paul', 'fr', 1);
INSERT INTO personne (idPersonne, nomPersonne, prenomPersonne, idPays, idVille) 
  VALUES (2, 'PONCE', 'Pierre', 'en', 2);

CREATE TABLE ville (
  idVille int(11) NOT NULL default '0',
  nomVille varchar(50) default NULL,
  PRIMARY KEY  (idVille)
);

INSERT INTO ville (idVille, nomVille) 
  VALUES (1, 'PARIS');
INSERT INTO ville (idVille, nomVille) 
  VALUES (2, 'LONDRES');

Nous allons ensuite créer des liens entre ces tables. Dans la fenêtre principale, cliquez sur l'icône structure de la table personne puis sur le lien gestion des relations. Indiquez sur quels champs des tables externes pointent les clés étrangères comme sur l'image ci-dessous puis validez. Dans le champ à afficher, choisissez nomPersonne.

Image non disponible

Allez maintenant à la gestion des relations de la table ville. Dans le champ afficher, choisissez nomVille puis validez. Faites la même chose pour la table pays en affichant libelle. Si ce n'est pas clair, voici une illustration de ces propos. Vous allez comprendre tout à l'heure à quoi ils servent…

Image non disponible

Ainsi, phpMyAdmin est capable de faire des jointures automatiquement. Allez dans l'onglet requête. Sélectionnez les champs comme sur l'illustration ci-dessous, puis cliquez sur Mise à jour de la requête. Vous voyez alors dans l'encadré du bas que la jointure se fait effectivement. Ensuite cliquez sur exécuter la requête pour afficher le résultat…

Image non disponible

Autre nouveauté, vous pouvez naviguer à travers les tables (à condition d'avoir défini les relations). Affichez les données de la table personne et vous verrez que les clés étrangères sont cliquables…

Image non disponible

Enfin, un des derniers gros avantages d'utiliser les relations : générer un schéma au format PDF. Ce fichier PDF contient également le dictionnaire de données. Des liens à l'intérieur du document permettent de naviguer intelligemment entre le dictionnaire et les tables. Pour générer votre schéma, choisissez la base de données concernée. Ensuite, cliquez sur l'onglet opérations, suivez le lien préparer le schéma en PDF. Entrez le nom que vous voulez donner à la page générée (il s'agit du titre figurant en haut de chaque page). Vous pouvez choisir mise en page automatique. Vous devez placer les éléments grâce à leurs coordonnées. Si vous possédez un navigateur récent, vous pourrez positionner tous les éléments à la souris grâce à l'éditeur visuel. Aucun lien n'apparaît pour le moment, mais ceux-ci apparaîtront une fois le fichier PDF généré. Si vous voulez voir un exemple de fichier PDF réalisé avec cet outil, cliquez sur ce lien.

L'utilisation de cet outil est relativement simple et intuitive, les fonctions les plus basiques vous seront assimilées très vite avec un peu de pratique.

XI. Plus loin avec Apache 2.2.11

Dans cette section, tout se passe dans le fichier c:\www\apache-2.2\conf\httpd.conf. Nous ne verrons que quelques Directives d'Apache qui sont les plus simples et les plus utiles lorsque l'on débute.

Vous devrez redémarrer le serveur Apache pour que les modifications prennent effet.

XI-A. DirectoryIndex

Indique quels sont les fichiers à envoyer au navigateur lorsque le visiteur tape une adresse se terminant par le nom d'un répertoire. Il s'agit en fait de la page par défaut du répertoire. DirectoryIndex index.php index.htm index.html

On tape dans la barre d'adresse http://127.0.0.1 ou http://127.0.0.1/, Apache renverra le premier fichier qu'il trouvera dans le répertoire avec une priorité allant de gauche à droite. Si index.php est présent, c'est lui qui sera envoyé au navigateur, sinon Apache passera au fichier index.htm et ainsi de suite. Si aucun des fichiers de cette directive n'est présent dans le répertoire, alors Apache renvoie soit une page d'erreur soit le contenu du répertoire, cela se paramètre à l'aide de la directive Directory que nous verrons un peu plus bas. N'oubliez pas de mettre index.php dans cette directive si vous utilisez PHP.

Note : vous pouvez donner des noms autres que index.

XI-B. Alias

Renvoie à un autre endroit du disque. Cela permet de stocker des documents ailleurs que dans le répertoire racine. Cela peut servir à héberger plusieurs sites sur un même serveur. Pour illustrer ceci, changeons le dossier c:\www\monsite\phpmyadmin en c:\www\phpmyadmin. Ajoutez à la fin du fichier, la ligne Alias /pma "c:\www\phpmyadmin"

Note : le fait de taper http://127.0.0.1/pma/ vous renverra alors au dossier c:\www\phpmyadmin. Il faut aussi ajouter la directive Directory afin d'autoriser l'accès au répertoire.

 
Sélectionnez
<Directory "c:/www/phpmyadmin">
  Order allow,deny
  Allow from all
</Directory>

XI-C. Directory

Regroupe les paramètres qui s'appliquent au répertoire (et à ses sous-répertoires) inclus dans cette directive. Admettons que nous possédions un dossier nommé images à la racine du site, ce dossier a donc pour adresse c:\www\monsite\images et que nous ne voulons pas que son contenu soit visible. Il est possible de faire beaucoup de choses avec cette directive, mais nous ne nous intéresserons qu'à la sous-directive Options. Nous allons donc ajouter, n'importe où dans le fichier httpd.conf les lignes suivantes :

 
Sélectionnez
<Directory "c:/www/monsite/images">
  Options -Indexes
</Directory>

Si vous souhaitez afficher le contenu du dossier, il suffit de supprimer le - qui précède Indexes. Relancez Apache. Tapez http://127.0.0.1/images. Son contenu doit normalement ne plus être visible.

XI-D. Apache en lignes de commande

On suppose que vous avez défini le PATH sinon vous devrez naviguer avec la commande cd. Pour démarrer le serveur Apache, tapez httpd -k start, pour l'arrêter, tapez httpd -k stop, et pour le redémarrer (cela suppose qu'il est déjà démarré) tapez httpd -k restart.

XII. Protection d'un répertoire par .htaccess

Nous allons voir ensemble comment protéger un répertoire. D'abord, créons un répertoire à protéger c:\www\monsite\AccesProtege. Il pourra contenir toutes sortes d'informations à protéger, afin de voir s'il est efficace, mettez-y des fichiers html, ou des images. Ensuite, il va falloir créer un répertoire servant à stocker les fichiers de mots de passe et de groupes d'utilisateurs. Ce répertoire doit lui-même être protégé, il ne doit donc pas se situer dans un répertoire racine du site ou de ses enfants. Créons le dossier c:\www\apache-2.2\users.

Création des utilisateurs et mots de passe avec la commande htpasswd. Maintenant, créons un utilisateur BOB ayant marley pour mot de passe (crypté en MD5 par défaut) et le fichier de mots de passe (vous pouvez le nommer autrement). À la première insertion d'un utilisateur, il faut créer le fichier à l'aide du paramètre -c À la création des utilisateurs suivants JACKY et TOTO, il ne faut pas donner en argument le paramètre -c, car le fichier est déjà existant. Vous pouvez voir la liste des paramètres possibles en tapant htpasswd /?.

 
Sélectionnez
C:\>htpasswd -c <Répertoire-Apache>\users\passwords BOB
Automatically using MD5 format.
New password: ******
Re-type new password: ******
Adding password for user BOB

C:\>htpasswd <Répertoire-Apache>\users\passwords JACKY
Automatically using MD5 format.
New password: ****
Re-type new password: ****
Adding password for user JACKY

C:\>htpasswd <Répertoire-Apache>\users\passwords TOTO
Automatically using MD5 format.
New password: *****
Re-type new password: *****
Adding password for user TOTO

C:\>
Éditez <Répertoire-Apache>\conf\httpd.conf et ajoutez-y cette directive :
<Directory "c:/www/monsite/AccesProtege">
  AllowOverride AuthConfig
  Options Indexes
</Directory>

<Répertoire-Apache> étant ici : c:\www\apache-2.2.

La directive AllowOverride permet de dire au serveur quelles sont les options de configuration que vous pouvez spécifier dans le fichier .htaccess. Ici, on lui dit de ne s'occuper que des Authentifications par mot de passe et on permet l'affichage du contenu du dossier.

Créons maintenant un fichier contenant les informations de groupes. Les groupes correspondent à un grade, un rang de personnes ayant les mêmes pouvoirs. Ici BOB et TOTO sont des administrateurs du site et JACKY est un simple membre. Nous allons stocker ces informations de groupe dans le fichier groups dans c:\www\apache-2.2\users. Vous pouvez lui donner le nom que vous voulez. Voici son contenu :

 
Sélectionnez
admins: BOB TOTO
membres: JACKY

Ne mettez surtout pas d'espace entre le nom du groupe et le deux-points (:), sinon cela ne marchera pas.

Ensuite, plaçons-nous dans le dossier c:\www\monsite\AccesProtege et créons le fichier .htaccess.

Comme vous ne pouvez pas directement créer un fichier ayant un nom commençant par un point (.) nommez-le comme vous voulez puis renommez-le sous l'invite MS-DOS à l'aide de la commande ren AncienNom .htaccess vous devez bien entendu vous trouver dans le répertoire contenant ces fichiers.

Ensuite éditez .htaccess et insérez-y ces quelques lignes :

 
Sélectionnez
AuthType Basic
AuthName "zone protégée" 
AuthUserFile <Répertoire-Apache>/users/passwords 
AuthGroupFile <Répertoire-Apache>/users/groups 
Require group admins

<Répertoire-Apache> étant ici : c:\www\apache-2.2.

Quelques explications.

  • AuthType détermine le type d'authentification.
  • AuthName détermine le texte s'affichant sur la fenêtre d'authentification.
  • AuthUserFile spécifie le chemin absolu (avec des slashs /) du fichier de mots de passe.
  • AuthGroupFile spécifie le chemin absolu (avec des slashs /) du fichier de groupes. Cette ligne est inutile si vous n'indiquez pas de groupes après Require.
  • Require indique quels sont les utilisateurs autorisés à accéder au répertoire. Il peut être suivi de group, user ou valid-user (tout en minuscules).
  • user indique le ou les utilisateurs autorisés (séparés par des espaces).
  • group indique le ou les groupes autorisés aussi séparés d'espaces.
  • valid-user indique que tout utilisateur présent dans le fichier de mots de passe est autorisé.

Maintenant, si vous tapez l'adresse http://127.0.0.1/AccesProtege une fenêtre d'identification doit apparaître vous laissant trois essais pour vous identifier. Vous devez donc entrer un nom et mot de passe appartenant au groupe admins : BOB ou TOTO. Si les informations demandées ne sont pas valides, vous arriverez sur une page d'erreur.

Par défaut, le fichier auquel se réfère le serveur Apache pour voir s'il y a des informations supplémentaires de configuration de répertoire se nomme .htaccess Vous pouvez changer ce nom grâce à la directive AccessFileName du fichier httpd.conf. Vous pouvez mettre plusieurs noms, ceux-ci ayant une priorité allant de gauche à droite comme avec DirectoryIndex. Comme sous les systèmes Unix, on met un point (.) en début du nom de fichier : sous ces systèmes, ces fichiers sont cachés. Apache ne les affichera pas même sous Windows.

Là n'est pas la seule utilisation du fichier .htaccess, vous pouvez aussi définir les pages d'erreurs propres à un répertoire, protéger un fichier par mot de passe, définir les pages d'index, les types Mime… Je vous laisse tout le plaisir de vous documenter sur Internet ;-)

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2002 Matthieu PETIOT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.