Installation, configuration d'un Intranet
avec un serveur Windows 2000 ou 2003.
IIS, PHP4, MySQL

Ce document propose l'installation de PHP et MySql sur Windows 2000 ou 2003 serveur sur lequel le serveur Web IIS est déjà installé.
Un minimum de sécurité s'impose surtout si vous n'êtes pas seul à avoir le droit de placer des fichiers PHP sur le serveur.

Sommaire

   Vérifier l'existant
   Autorisations de sécurité
   IIS
   PHP
   Editeur PHP
   MySQL
   PHP et MySQL
   Portail claroline
   Bii
   PhpMyAdmin


 
Vérifier l'existant
 

Vérifiez que IIS est installé

IIS : Internet Information Serveur. Il s'agit du serveur Web qui permet aux stations de voir à partir de leur navigateur, les pages html stockées dans certains répertoires sur le serveur.

IIS est habituellement installé en même temps que Windows 2000 Serveur. Si ce n'est pas le cas, vous pouvez l'installer en allant dans "Ajout suppression de programmes" et "Installation de Windows". Cochez "Service Internet IIS".

IIS n'est pas installé automatiquement lors de l'installation de Windows 2003 Serveur. Allez dans "Gérer votre serveur" et ajoutez le rôle "Serveur d'application (IIS, ASP.NET)".
Lorsque le serveur IIS est installé, allez dans "Outils d'administration" et "Gestionnaire des services Internet (IIS)". Dans la partie "Extensions du service Web", autorisez "Toutes les extensions ISAPI inconnues".

Vérifiez que IIS fonctionne correctement

Vérification sur le serveur

Dans les outils d'administrations, faites "Gestionnaire des services Internet". Vous devez y trouver le nom de votre serveur (serv sur la copie d'écran).

IIS 5 de Windows 2000
IIS 5 sur Windows 2000

La ligne "Site FTP par défaut" n'est nécessaire que si vous voulez pouvoir utiliser un client FTP sur les stations. Si vous ne l'avez pas, vous pourrez facilement l'ajouter pas la suite si vous en avez besoin.

IIS 6 avec Windows 2003
IIS 6 sur Windows 2003

Pour connaître le répertoire de base dans lequel vous pouvez mettre des pages HTML, faites un clic droit sur "Site Web par défaut" puis choisissez "Propriétés" et "Répertoire de base".
Le chemin de ce répertoire de base est indiqué dans "Chemin d'accès". Ne changez pas ce chemin d'accès. Habituellement ce chemin est
      C:\Inetpub\wwwroot

Si on voulait changer ce chemin, il faudrait au préalable définir un répertoire avec les bons droits.

Utilisez votre navigateur et tapez l'adresse
      http://localhost
ou encore
      http://127.0.0.1
ou encore si votre serveur s'appelle serv
      http://serv
ou encore si votre serveur s'appelle serv et si votre domaine s'appelle dom.priv
      http://serv.dom.priv
ou encore si votre serveur a pour numéro IP 172.16.0.1
      http://172.16.0.1

Créez un fichier texte dans le répertoire C:\Inetpub\wwwroot en le nommant essai.htm

Veillez à ce que Windows ne rajoute pas .txt à la fin du nom du fichier.

Mettez dans ce fichier texte une simple petite phrase comme

<H1>Bonjour à tous</H1>

Pour voir votre fichier essai.htm à partir d'un navigateur, faites suivre l'adresse de /essai.htm
Par exemple
      http://serv/essai.htm

Vérification sur les stations

Sur les stations, vérifiez avec le navigateur que les adresses suivantes fonctionnent de la même façon
      http://serv
      http://serv.dom.priv
      http://172.16.0.1
      http://serv/essai.htm
      http://serv.dom.priv/essai.htm

Il est normal que Localhost et 127.0.0.1 ne fonctionnent que sur le serveur.

Fonctionnement

Lorsqu'un utilisateur tape l'adresse de votre serveur dans son navigateur (http://serv), le service IIS du serveur cherche dans le répertoire de base la présence d'un fichier Default.htm et s'il le trouve, le lit et envoie son contenu au navigateur. Il aurait donc été équivalent de taper http://serv/Default.htm.
Pour charger le fichier essai.htm, nous avons été obligé de taper l'adresse http://serv/essai.htm

Nous verrons plus loin comment ajouter les noms des fichiers utilisés par défaut (qu'il n'est pas nécessaire de mettre à la fin de l'adresse pour).

Pour que IIS ait le droit de lire le fichier, il est nécessaire qu'il ait un accès au moins en lecture à ce fichier.

Nous verrons plus loin comment modifier les autorisations de sécurité pour permettre à IIS de lire les fichiers des répertoires Web.

 

 
Autorisations de sécurité
 

Sécurité des répertoires

Nous allons avoir besoin de modifier la sécurité sur des répertoire ou des fichiers. Ce paragraphe a pour but de rappeler la méthode.

Règle de prudence : Pour ne pas risquer de détruire la sécurité des répertoires existants, nous ne modifierons la sécurité que pour les répertoires que nous avons créés.

Supposons que vous avez une partition "F:" qui est formatée NTFS. Créez un répertoire web dans cette partition.

F:\web

Vous remplacerez la lettre F par le lecteur que vous avez choisi. Ce lecteur peut éventuellement être C: si vous ne pouvez pas en choisir un autre.

On pourrait laisser le paramétrage par défaut qui consiste à donner l'autorisation au groupe "Tout le monde" avec "Contrôle total". Cependant, il n'est pas nécessaire de laisser tant de droits. De plus si vous souhaitez permettre à certaines personnes d'accéder par FTP à un répertoire web, il sera nécessaire de limiter l'accès à cette personne (Le groupe "Tout le monde" ne convient donc pas).

On mettra toujours le groupe Administrateurs (remarquez le "s" à la fin) et le groupe SYSTEM avec un contrôle total. Mais ces groupes ne permettent pas à IIS d'accéder au répertoire. En effet, IIS utilise un compte utilisateur spécial qui a pour nom IUSR_ suivi en général du nom de votre serveur. Dans la suite je suppose que votre serveur s'appelle SERV, ce compte est donc IUSR_SERV.

Le compte IUSR_SERV n'a pas besoin d'un contrôle total. Dans la plupart des cas, il lui suffirait d'un accès en lecture mais certains sites vont nécessiter un accès en modification au moins pour certains fichiers. Nous allons donner un accès en Modification à ce compte.

Sécurité sur le répertoire F:\web

Faites un clic droit sur le répertoire web, choisissez "Propriétés" puis "Sécurité".

Par défaut, vous avez certainement "Tout le monde" avec "Contrôle total".
Enlevez la coche devant "Permettre aux autorisations pouvant être héritées du parent d'être propagées à cet objet" et supprimez "Tout le monde".

Ajoutez "Administrateurs", "System" et IUSR_SERV. Mettez "Contrôle total" pour "Administrateurs" et pour "System" et cochez toutes les autorisations sauf "Contrôle total" pour IUSR_SERV

Si vous sélectionnez "Administrateurs (DOM\Administrateurs)", vous devez avoir toutes les coches dans la colonne Autoriser
Si vous sélectionnez "SYSTEM", vous devez avoir toutes les coches dans la colonne Autoriser
Si vous sélectionnez "Compte Invité Internet (DOM\IUST_SERV)", vous devez avoir les coches indiquées sur la copie d'écran.

Changer la sécurité sur un répertoire non vide

Le changement de sécurité sur un répertoire ne change pas automatiquement la sécurité des répertoires qu'il contient. Si vous voulez que la sécurité s'applique à toute l'arborescence, avant de valider la fenêtre précédente, vous devez utiliser le bouton "Avancé..." et cocher "Réinitialiser les autorisations sur tous les objets enfants...".

Bien sûr si vous vous êtes appliqué à mettre des sécurités sur les différents sous-répertoires, tout votre travail sera perdu. En particulier il ne faudrait pas par exemple effectuer une telle modification sur C: ou encore sur C:\Winnt car ces répertoires contiennent des sous-répertoires ayant des sécurités très spécifiques qui seraient détruites. D'une façon générale, sauf cas particuliers, ne changer la sécurité que sur les répertoires que vous avez créés.

Sécurité des sous-répertoires et des fichiers

Maintenant, lorsque vous créez un sous-répertoire dans F:\web, il hérite automatiquement de la sécurité du répertoire web.

Si par exemple un répertoire F:\web\unsite est créé et que la sécurité du répertoire unsite ne convient pas, vous pouvez la changer en faisant un clic droit sur le répertoire unsite et en allant dans "Proptiétés" et "Sécurité".

Si un fichier n'a pas la sécurité voulue, vous pouvez faire un clic droit sur le fichier et dans "Proptiétés" et "Sécurité" modifier.

Pour modifier, il est possible que vous deviez commencer par décocher "Permettre aux autorisations pouvant être héritées du parent d'être propagées à cet objet" et à choisir "Copier".

 
IIS
 

Choix du fichier par défaut

Lorsque le nom du fichier n'est pas précisé dans l'adresse html, IIS cherche le fichier nommé Default.htm dans le répertoire correspondant. Si vous souhaitez que le fichier par défaut soit à index.htm ou encore index.html, il vous suffira de l'ajouter dans le paramétrage de IIS. L'ordre de recherche permet de donner une priorité.

Pour ajouter index.htm, allez dans "Gestionnaire des services Internet". Faites un clic droit sur "Site Web par défaut", choisissez "Propriétés" et "Documents".

 

Création d'un sous-site

Il est possible de créer des sous-répertoires dans le répertoire C:\inetpub\wwwroot mais ces sous-répertoires appartiennent au site principal. Nous allons préférer créer les sous-sites dans le répertoire F:\web.

Dans le répertoire F:\web, créez un répertoire html et dans html créez un répertoire lycee (sans accent).

Il est déconseillé de mettre des accents ou des espaces dans les noms de répertoires et de fichiers.

F:\web\html\lycee

Automatiquement, lycee a hérité des autorisations de html qui lui même hérite des autorisations de web. Le répertoire "lycee" est est autorisé en "Contrôle total" pour Administrateurs et System et en "Modifier" pour IUSR_SERV.

Effectuez le partage web du répertoire lycee. Pour cela faites un clic droit sur lycee, "Propriétés" et "Partage web". 

 

Pour vérifier le bon fonctionnement, placez un fichier index.htm dans F:\web\html\lycee et à partir du navigateur du serveur ou d'une station, tapez

http://serv/lycee

Partage réseau et partage web

Ne confondez pas les partages réseau (visibles par le voisinage réseau) et les partages web (utilisé par le serveur web et visibles par les navigateurs).

L'accès au partage réseau se fait par un chemin ressemblant à \\serv\partage alors que l'accès à un partage web se fait par une adresse de la forme http://serv/soussite

Si vous voulez pouvoir mettre à jour de site stocké dans le répertoire lycee en étant sur une station, deux solutions sont possibles :

- Utilisation d'un logiciel client ftp

- Utilisation du voisinage réseau. Dans ce cas, vous partagerez le répertoire lycee en ne laissant dans les autorisations de partage que le nom de l'utilisateur chargé de mettre à jour le site.

Dans les deux cas, il sera nécessaire de modifier les autorisations de sécurité sur le répertoire lycee (et ses sous-répertoires) en ajoutant le nom de la personne et en lui donnant le droit "Modifer".

Avec IIS 6 (windows 2003), il est nécessaire également d'autoriser les connexion anonymes sur le répertoire lycee. Avec le "Gestionnaire des services Internet (IIS)", entrez dans "Site Web par défaut" et faites un clic droit sur le site "lycee" (dans la fenêtre de gauche). Dans les propriétés, choisissez le volet "Sécurité de répertoire" et activez la connexion anonyme. Ne changez pas le nom ni ne mot de passe.

Limiter l'accès à un sous-site à un ensemble de personnes

Habituellement tout utilisateur, avec son navigateur, accède au répertoire web sans avoir besoin de s'identifier. L'accès se fait par l'intermédiaire du compte IUSR_SERV.

Si vous voulez par exemple limiter l'accès à un sous-site au groupe des professeurs, il suffira pour le répertoire de ce sous-site, de supprimer IUSR_SERV et de mettre à la place le groupe PROFS.

Il est supposé que dans "Utilisateurs et ordinateurs Active Directory" le groupe PROFS existe et qu'il contient des utilisateurs.

Lorsqu'une personne tapera l'adresse de ce sous-site, il sera invité à taper son nom et son mot de passe (inutile d'indiquer le nom du domaine si le compte est dans le domaine contenant le sous-site).

Ne cochez pas "Enregistrer ce mot de passe dans votre liste de mots de passe" si d'autres personnes accèdent à votre ordinateur.

Si vous l'avez coché par erreur, il est encore possible de le décocher afin que votre ordinateur oublie le mot de passe.

 

 
PHP
 

Installation

Il existe essentiellement deux solutions pour installer PHP. Le programme automatique php-4.3.1-installer.exe et l'installation manuelle en décompressant le fichier php-4.3.1-Win32.zip.
La méthode manuelle nous permettant d'avoir une meilleure rapidité de l'exécution du PHP sur le serveur, c'est celle que l'on va adopter.

La méthode avec le programme d'installation automatique nécessite le fichier msconctl.ocx qui n'est habituellement pas présent sur le serveur 2000. Il faudrait donc commencer par se le procurer et le copier dans le répertoire System32.

Décompresser dans le bon répertoire

Créez le répertoire C:\PHP

Allez à l'adresse
      http://www.php.net/downloads.php

Recherchez et téléchargez le fichier php-4.3.1-Win32.zip

Vous pouvez également trouver ce fichier ici : php-4.3.1-Win32.zip

Il est possible que sur le site PHP, une version plus récente que celle-ci soit proposée.

Décompressez le fichier n'importe où. Vous obtiendrez un répertoire php-4.3.1-Win32 et éventuellement à l'intérieur encore un répertoire php-4.3.1-Win32. Entrez dans ce répertoire, sélectionnez tout et faites "Copier", placez-vous dans C:\PHP et faites "coller".

Le répertoire php-4.3.1-Win32 peut ensuite être supprimé.

Ajouter deux répertoires

Créez dans C:\PHP un répertoire que vous nommerez sessiondata

Créez dans C:\PHP un répertoire que vous nommerez upload

Vous devriez finalement obtenir l'arborescence suivante :

Le compte IUSR_SERV a besoin du droit Modifier dans les autorisations de sécurité pour ces deux répertoires.

Copier php4ts.dll

Copiez le fichier C:\PHP\php4ts.dll dans C:\Winnt\System32

Indiquer à IIS qu'il doit utiliser PHP

Dans les outils d'administration, allez dans le "Gestionnaire des services Internet". Faites un Clic droit sur "Site Web par défaut", "Propriétés", "Répertoire de base" et "Configuration". Dans la liste des "Mappages d'application", ajoutez comme exécutable

C:\PHP\sapi\php4isapi.dll

et mettez comme extension

.php

Si vous oubliez le point devant php, il sera automatiquement ajouté.

Vous obtenez une ligne comme indiqué sur la copie d'écran suivante :

Vous pouvez éventuellement ajouter cette même ligne mais pour l'extension .php3 si vous utilisez ce type de fichiers.

Indiquer à IIS les fichiers .php comme documents par défaut

Allez dans "Gestionnaire des services Internet", faites un clic droit sur "Site Web par défaut", "Propriétés" et "Documents". Ajoutez index.php et mettez-le au début de la liste.

Si vous avez ajouté l'extension .php3, vous pourrez également ajouter index.php3

Copier php.ini dans C:\Winnt

Copiez C:\PHP\php.ini-dist dans C:\Winnt en le renommant php.ini

Adapter le fichier php.ini

Si vous êtes pressé, les modifications de php.ini proposées ci-après sont déjà dans le fichier php_ini.zip que vous pouvez télécharger. Mettez le fichier php.ini qu'il contient dans C:\Winnt. Redémarrez le service IIS pour que le fichier php.ini soit pris en compte (voir plus loin le redémarrage de IIS).

Si vous décidez de faire le paramétrage vous même, avec le bloc-notes, ouvrez le fichier php.ini qui est dans C:\Winnt

Corrigez les lignes suivantes :

 Le point-virgule devant une ligne indique que la ligne n'est pas prise en compte.
Le fichier proposé en téléchargement au-dessus (php_ini.zip) a le paramétrage indiqué par une étoile (*)


Par défaut

Meilleure sécurité (*)

safe_mode = Off safe_mode = On

Par défaut, il est possible d'exécuter un programme sur le serveur (ce programme peut-être n'importe où sur le serveur, il suffit que le compte IUSR_SERV ait le droit de l'exécuter). Cela veut dire qu'un code comme celui-ci

echo exec("ipconfig -all",$lignes)."<BR>";
foreach($lignes as $ligne) 
  echo $ligne."<BR>";

serait exécutée sur le serveur et aurait pour effet d'envoyer dans le navigateur, la configuration des cartes réseau du serveur.
On peut bien sûr imaginer l'utilisation d'un programme plus dangereux.

En mettant safe_mode=On et en indiquant dans safe_mode_exec_dir le chemin d'un répertoire local au serveur accessible seulement par vous, vous supprimez les risques en vous laissant la possibilité de placer les programmes que vous voulez dans ce répertoire.
En général on ne mettra rien après safe_mode_exec_dir  =

Cette précaution est surtout importante si vous laissez d'autres personnes placer des fichier php dans des répertoires web de votre serveur.

Certaines instruction php risquent de ne plus fonctionner avec cette sécurité renforcée.


Par défaut

Meilleure sécurité (*)

;open_basedir =
Remarquez le point-virgule.
open_basedir = "../.."
sans le point-virgule et avec deux fois un point un slash et encore deux fois deux points après le signe =

Par défaut, certaines instructions de php permettent de voir le contenu des disques durs du serveur (opendir, readdir, fopen...).
Si vous avez ce paramétrage par défaut et que vous êtes curieux, vous pouvez essayer de mettre ceci dans un fichier php :

$fich="C:\\winnt\\php.ini";    // remarquez les deux \\
$f=fopen($fich,"r");
while (!feof($f){
  $lig=fgets($f);
  echo $lig."<BR>";
}
fclose($f);

Ce code doit être mis dans un fichier php et placé dans un répertoire Web. A partir d'un navigateur d'une station, en appelant ce fichier, on verra le contenu du fichier php.ini, alors que ce fichier est dans le répertoire Winnt du serveur !
On verra plus loin, que certains fichiers peuvent contenir des mots de passe en clair. Il est donc important de ne pas laisser le paramétrage par défaut.

En mettant open_basedir = "../.." le fichier php ne pourra pas remonter de plus de deux répertoires au dessus de celui dans lequel il est.

Si vous avez besoin d'autoriser des répertoires supplémentaires, utilisez le ; pour séparer. Par exemple
open_basedir = " ../..;uploadpath"

Par exemple un fichier php situé dans le répertoire
F:\web\html\lycee
pourra accéder aux fichiers situés dans F:\web mais ne pourra pas accéder aux fichiers situés dans F:\ ou de C:\

Autre exemple
E:\iaca\Perso\cadres\bonnot\web\html\index.php
pourra contenir des accès à tous les répertoires et fichiers contenus dans le répertoire E:\iaca\Perso\cadres\bonnot mais ne pourra pas remonter davantage.

Il serait possible à la place des deux points d'indiquer un chemin mais beaucoup de fichiers php ne fonctionneraient plus (par exemple claroline et bii vus plus loin risqueraient de ne plus fonctionner).


Par défaut

Paramétrage corrigé (*)

;include_path = ".;c:\php\includes"
Avec le point virgule.
include_path = "."
Sans le point-virgule. Permet d'utiliser include avec un fichier situé dans son site.

En laissant le point virgule, cette ligne serait ignorée et la valeur utilisée serait '.;c:\php4\pear' ce qui ne convient pas.
En enlevant le point virgule et en mettant '.' cela permet à chacun d'utiliser l'instruction include avec les fichiers de son site.


Par défaut

Paramétrage corrigé (*)

; cgi.force_redirect = 1
Remarquez le point-virgule.
cgi.force_redirect = 0
sans le point-virgule et égal à 0

Il s'agit du paramétrage pour une utilisation avec IIS.


Par défaut

Paramétrage corrigé (*)

; fastcgi.impersonate = 1
Remarquez le point-virgule.
fastcgi.impersonate = 1;
sans le point-virgule

Il s'agit du paramétrage pour une utilisation avec IIS.


Par défaut

Paramétrage corrigé (*)

session.save_path = /tmp session.save_path = C:\PHP\sessiondata

Il s'agit du répertoire que l'on a créé dans le répertoire PHP et qui servira à PHP pour stocker les petits fichiers nécessaires au fonctionnement des sessions.


Par défaut

Pour pouvoir envoyer des fichiers (*)

upload_tmp_dir = upload_tmp_dir = "C:\php\upload"

Lorsque l'utilisateur a la possibilité d'envoyer un fichier sur le serveur à l'aide d'un bouton souvent appelé "Upload" ou "Télécharger", c'est le répertoire temporaire qui est par défaut utilisé. Or avec Windows ce répertoire temporaire n'a pas les droits pour IIS et n'est pas réellement fait pour cela.

Nous allons créer un répertoire spécialement pour cette fonction. On pourra par exemple appeler ce répertoire upload et le placer C:\php
Si vous choisissez un autre répertoire, corrigez ipload_tmp_dir en conséquence.
Modifiez les permissions de sécurité sur le répertoire upload pour que le groupe Administrateurs et le groupe System aient un contrôle total. Et surtout, ajoutez le compte IUSR_xxx avec un droit "Modifier".

Autres changements possibles pour php.ini


Par défaut

Souvent nécessaire (*)

register_globals = Off register_globals = On

La valeur On est malheureusement encore souvent nécessaire avec beaucoup de fichier php.


Par défaut (*)

Le temps de la mise aux point

error_reporting = E_ALL & ~E_NOTICE
;error_reporting = E_ALL
;error_reporting = E_ALL & ~E_NOTICE
error_reporting = E_ALL

Seul le point-virgule a été déplacé d'une ligne à l'autre.

Le choix E_ALL est le meilleur si vous ne mettez que des fichiers php que vous avez créés. En effet, toutes les erreurs vont être signalées ce qui vous permettra de créer un code "propre".
Malheureusement, beaucoup de fichier php supposent que les erreurs peu graves ne sont pas montrées et ne prennent pas la peine de les corriger.

Le choix par défaut pourra donc être conservé.
E_ALL & ~E_NOTICE permettra de signaler toutes les erreurs sauf les erreurs peu graves.


Par défaut (*)

Meilleure sécurité

display_errors = On
log_errors = Off
display_errors = Off
log_errors = On

Le temps de la mise au point, il sera pratique d'afficher les messages d'erreurs sur la station (valeur par défaut).
Il peut arriver cependant qu'un morceau de code PHP soit envoyé en même temps que l'erreur.
Pour augmenter la sécurité, vous pourrez demander à PHP de ne plus envoyer les messages au navigateur mais de les stocker sur le serveur.

Redémarrer IIS

Après avoir modifié et enregistré php.ini, il est nécessaire de redémarrer le service IIS.

IIS version 5 : Dans les outils d'administration, faites "Gestionnaire des services Internet". Faites un clic droit sur le nom de votre serveur et choisissez "Redémarrage de IIS". 

IIS version 6 : Dans les outils d'administration, faites "Gestionnaire des services Internet (IIS)". Faites un clic droit sur le nom de votre serveur et choisissez "Toutes les tâches" et "Redémarrer IIS". 

Vérification

Créez un fichier texte que vous nommerez essai.php et que vous placerez par exemple dans C:\Inetpub\wwwroot

Veillez à ce que Windows ne rajoute pas .txt à la fin du nom du fichier.

Editez ce fichier avec le bloc-notes et mettez ceci :

<?php
echo "Ceci est un texte envoyé par php";
?>

Utilisez un navigateur et tapez l'adresse
      http://serv/essai.php

Vous ne devez voir que le texte placé dans les guillemets. Si vous voyez les points d'interrogation, ou le mot echo, c'est que IIS n'a pas demandé au programme php de traiter le fichier essai.php. Vous devez dans ce cas vérifier les "Mappages d'application".
Si une erreur php est signalée, vérifiez votre fichier essai.php.

Fonctionnement

Lorsqu'un fichier avec extension .php est appelé par un navigateur, le programme IIS demande au programme Php (dans notre cas il s'agit de la dll php4isapi.dll) d'interpréter le fichier. Ce fichier peut être composé de code html ou de code php.

Le code php est placé entre <? et ?> ou mieux entre <?php et ?>.
Le programme PHP comprend le mot echo et envoie au navigateur ce qui est placé entre les guillemets.

PHP est un langage qui permet de créer des pages HTML de façon dynamique. Le navigateur ne reçoit pas le code php mais seulement le code html généré et envoyé à l'aides d'instructions comme echo.

Les possibilités de PHP sont très grandes. Vous pouvez trouver une documentation en ligne à l'adresse http://www.php.net/. Vous pouvez également télécharger le fichier (en français) "doc.php.nexen.pdf" à l'adresse http://dev.nexen.net/docs/php/index.php ou encore le télécharger ici doc.php.nexen.pdf.zip

Exercice 1 (un compteur)

Créez un sous-répertoire dans F:\web\html\lycee que vous nommerez essai. Créez un fichier index.php et mettez-le dans essai.
Quelle est l'adresse à taper dans les navigateurs pour voir le contenu de ce fichier ?

Créez un fichier dans essai et nommez-le compteur.txt. Editez ce fichier pour qu'il contienne une ligne avec simplement le chiffre 0. Modifiez la sécurité sur ce fichier pour que IUSR_SERV (utilisez le compte correspondant de votre serveur) ait le droit de modifier.

Editez le fichier index.php et mettez les lignes php qui permettront à un utilisateur de voir combien de fois ce fichier a été regardé.

Aide :
Le code à mettre dans index.php ouvrira le fichier compteur.txt, lira la ligne, augmentera le nombre de 1 et remplacera la ligne par la nouvelle valeur.
Vous pourrez avoir besoin des mots fopen fgets fputs, fclose et trim
Si cette aide ne suffit pas, vous pouvez trouver une partie de la solution ici : exercice1.

 
Editeur PHP
 

Il n'est pas nécessaire d'utiliser un éditeur PHP puisque le simple bloc-notes suffit. Il est cependant très pratique.

Vous pouvez télécharger PHPEdit et l'installer sur les ordinateurs sur lesquels vous serez amenés à créer ou modifier des fichiers PHP.

La version stable actuelle est la 0.6 mais des versions plus récentes semblent également donner satisfaction.

Vous trouverez PHPEdit à l'adresse :
http://www.phpedit.net/products/PHPEdit

Vous pouvez également trouver la dernière version stable ici : PHPEdit-stable-0.6-2001-10-11.exe
et la version (que je préfère) du 20 fév 2002 ici : PHPEdit-devel-0.7.1.107-2003-02-20.zip

Remarque : Avec la version 0.6, utilisée sur un 2000, j'ai obtenu un message indiquant que la dll msvcp60.dll est manquante. On peut copier cette dll à partir d'un Windows 98 ou d'un Windows XP et la placer dans le répertoire Winnt.
La version du 20 fév 2002 n'a pas de programme d'installation. Décompressez le fichier dans "C:\Program Files\PHPEdit", faites un double clic sur PHPEdit-Settings.reg afin de modifier la base de registre et ajoutez un raccourci vers "C:\Program Files\PHPEdit\PHPEdit.exe" pour pouvoir appeler plus facilement le programme.

Si vous utilisez PHPEdit à partir d'une station, il existe plusieurs solutions pour mettre les fichiers php dans les répertoires web du serveur :
- Le répertoire web a un partage réseau (si possible avec des autorisations de partage limités à un utilisateur)
- Vous utilisez un client FTP (cela sous-entend d'avoir le serveur FTP installé sur le serveur et paramétré en conséquence).
- Vous avez accès au serveur ou ce qui revient au même, vous donnez les fichiers à quelqu'un qui a accès.

 


MySQL
 

MySQL est un logiciel de base de données. Il va nous permettre de créer et utiliser des bases de données. Chaque base de données est composées de tables.
Si vous imaginez une table présentée sous forme de tableau, chaque ligne du tableau représente une fiche ou encore un enregistrement et chaque colonne représente un champ.
Chaque champ comporte un nom et des caractéristiques.

Prenons un exemple qui devrait permettre de stocker des titres des CD ainsi que leur contenu. On va pour cela créer une base (soit 'mescd' le nom de cette base). Dans cette base on pourra créer une table s'appelant par exemple 'listecd'. Cette table contiendra les champs 'nom', 'description' et 'Ref'.

Dans le champ Ref on mettra le nom d'une autre table (de la même base). Cette table sera le contenu du CD.

Installation

mssql s'installe sur le serveur.

Recherchez de préférence la dernière version de MySQL pour Windows sur le site http://www.mysql.com/downloads
Si vous ne trouvez pas vous pouvez télécharger la version 3.23.55 ici : mysql-3.23.55-win.zip

Décompressez le fichier dans un répertoire quelconque et exécutez setup.exe. Répondez "Next" à chaque étape de l'installation.

Le répertoire dans lequel vous avez décompressé les fichiers peut ensuite être supprimé.

Ouvrez une fenêtre DOS et placez-vous dans le répertoire C:\mysql\bin
Tapez exactement :

mysqld-nt --install

Vous devez obtenir un message indiquant que le service a été installé correctement.

Maintenant que le service est installé, il démarrera automatiquement à chaque fois que le serveur sera démarré. Actuellement le service n'est pas encore démarré. Une solution consisterait à redémarrer le serveur mais on peut simplement taper :

net  start  mysql

Il ne sera normalement plus nécessaire de démarrer le service avec net start sauf si des paramètres de configuration ont été changés (dans ce cas on tapera net stop mysql puis net start mysql pour l'arrêter et le redémarrer).

Vérification

Vous êtes toujours dans la fenêtre DOS et le répertoire courant est C:\mysql\bin

Tapez

mysql

Vous devez alors obtenir
mysql>
indiquant que vous êtes dans l'environnement de MySQL et que les ordres que vous allez maintenant taper sont des ordres qui seront interprétés par MySQL.

Par exemple en tapant help vous obtenez une aide succincte.
En tapant status, vous obtenez la version et quelques renseignements comme la base actuellement utilisée (aucune pour l'instant).
Pour quitter mysql tapez simplement exit. Cela n'empêche pas le service mysqld-nt de continuer à faire son travail.

Lors de l'installation, deux bases ont été automatiquement créées (elles sont dans le répertoire c:\mysql\data). L'une d'elle est très importante car elle contient la liste des bases présentes ainsi que les utilisateurs ayant droit à ces bases. Il s'agit de la base mysql représentée par le répertoire c:\mysql\data\mysql

Je vous propose de faire une copie du répertoire data, cela vous permettra si nécessaire de revenir à l'étape actuelle.

Voici quelques lignes qui vont permettre de voir une partie de la table user de la base mysql (vous êtes dans une fenêtre dos et le répertoire courant est c:\mysql\bin).

mysql
use mysql
select host,user,password,grant_priv from user where 1;
exit

La première ligne appelle mysql.exe et affiche le prompt mysql>
la deuxième ligne demande à mysql d'utiliser la base mysql (mysql est le nom donné à la fois au programme et à la base principale de mysql, il s'agit ici de la base qui est dans le répertoire data).
La troisème ligne demande de montrer les champs host, user, password et grant_priv qui sont dans la table user (elles est dans c:\mysql\data\mysql). Where 1 veut dire toutes les fiches (donc toutes les lignes de notre table). N'oubliez pas le point-virgule à la fin de la ligne. S'il est oublié, tapez-le à la ligne suivante.
La dernière ligne, permet lorsqu'on a terminé, de quitter mysql.

Configuration

Par défaut mysql est accessible à partir de n'importe quel ordinateur sans mot de passe.

Si vous n'êtes pas convaincu, copier le fichier mysql.exe qui est sur le serveur et mettez-le sur une station quelconque (ou utilisez un ordinateur qui a mysql installé).
Ouvrez une fenêtre dos sur cette station et exécutez mysql.exe avec les paramètres comme indiqué ci-après :

mysql -h serv -u root

Vous remplacerez simplement serv par le nom réel du serveur.

Vous pouvez ensuite, faire ce que vous voulez avec les droits root. Faites exit pour quitter.

La première chose à faire est donc de protéger MySQL par un mot de passe.

Observons la copie d'écran précédente. Le tableau comporte 4 lignes.

Ligne 1 : L'utilisateur nommé root peut utiliser mysql sur le serveur (localhost) sans mot de passe avec tous les droits.
Ligne 2 : L'utilisateur nommé root peut utiliser mysql à partir de n'importe quel ordinateur (%) sans mot de passe avec tous les droits.
Ligne 3 : Tout utilisateur peut utiliser mysql sur le serveur (localhost) sans mot de passe avec tous les droits. Il doit cependant avoir été capable d'ouvrir une session sur le serveur ce qui n'est en général autorisé qu'aux administrateurs.
Ligne 4 : Tout utilisateur peut utiliser mysql à partir de n'importe quel ordinateur sans mot de passe avec des droits réduits.

Vous êtes sur le serveur et vous avez tapé déjà mysql.
Tapez ceci (en remplaçant 1234 par un mot de passe sérieux de votre choix)

use mysql
update user set password=password('1234') where user='root';
exit;
net stop mysql
net start mysql

Ligne 1 : On demande à mysql d'utiliser la base nommée mysql
Ligne 2 : On demande à mysql de modifier la table user. Il s'agit de changer le champ password pour toutes les lignes où root est le nom de l'utilisateur. Le mot password avant le signe = est le nom du champ alors que password après le signe = est une fonction qui va coder notre mot de passe sur 8 octets (16 caractères)..
Ligne 3 : On quitte mysql
Ligne 4 et 5 : On redémarre le service pour que la modification soit prise en compte.

A partir de maintenant, pour charger mysql vous taperez :

mysql -u root -p

Si vous obtenez un message "accès refusé", il vous reste à arrêter le service et à remplacer le fichier c:\mysql\data\user.MYD par celui que vous avez obtenu lorsque vous avez par prudence copié le répertoire data. Redémarrez le service, tapez mysql sans paramètre et recommencez à mettre le mot de passe.

Pour finir la protection de mysql, il nous reste à supprimer les deux lignes qui n'ont pas de nom dans la colonne user.

use mysql
delete from user where user='';
select host,user,password,grant_priv from user;
exit;
net stop mysql
net start mysql

Ligne 1 : utilisation de la base mysql
Ligne 2 : Suppression dans la base user des lignes ayant chaîne vide dans le champ user
Ligne 3 : Cette ligne n'est pas nécessaire, elle permet simplement de vérifier que le travail à été fait.

Si plus tard vous voulez changer le mot de passe, vous procéderez de la même façon (charger mysql et donner le mot de passe actuel, utiliser la base mysql, changer le mot de passe, quitter mysql, arrêter le service mysql et démarrer le service mysql).

Création d'une base

Intéressons nous maintenant à la table db de la base mysql. Elle contient la liste des bases présentes. La création et la suppression d'une base se feront à l'aide des commandes create database et drop database qui se chargeront de créer ou supprimer la base et de modifier le fichier db en conséquence.

Pour créer ou supprimer une base, il ne suffit donc pas de modifier la table db. Vous devez utiliser les commandes correspondantes.

Supposons que l'on souhaite créer une base que l'on pourra nommer "mescd" et qui contiendra des tables permettant de retrouver les titres des musiques contenues dans ces CD.
On peut imaginer une seule table avec comme champ le nom du CD, et un champ par musique. Cette solution présente l'avantage de ne contenir qu'une table mais le gros inconvénient de devoir limiter le nombre de musiques. Par exemple on pourrait considérer que chaque CD a au maximum 30 plages. Notre table contiendrait donc 31 champs.
Cette façon de faire ne conviendra pas si on remplace les CD de musiques par des CD informatiques contenant souvent un grand nombre de fichiers.

Je propose donc de procéder différemment. La table principale (listecd) va contenir un champ pour le nom du CD, un champ pour une description succincte et un champ contenant le nom d'une autre table. Cette autre table contiendra la liste des titres et ne sera donc pas limitée en taille.

Dans l'environnement mysql (donc avec le prompt mysql>) tapez :

create database mescd;
uses mescd;
create table listecd (
   nom varchar(50) not null,
   description varchar(100),
   id int auto_increment,
   primary key(`id`));

Pour taper les ` dans la définition de la clé primaire, utilisez les touches "Alt gr" et "7" puis lâchez "Alt gr" et tapez un espace.

Ligne 1 : création de la base nommée "mescd".
Ligne 2 : Utilisation de la base que l'on vient de créer.
Ligne 3 et suivantes : Il n'est pas nécessaire de passer à la ligne comme dans l'exemple, la fin de la commande étant signalée par le point-virgule.
La table nommée listecd est créée dans la base mescd. Dans les parenthèses, on donne la structure de la table en définissant chaque champ.
Le champ nommé "nom" pourra contenir jusqu'à 50 caractères et ne pourra pas être vide.
Le champ nommé "description" (sans accent) pourra contenir jusqu'à 100 caractères.
Le champ nommé "id" sera un nombre entier augmenté automatiquement de 1 à chaque ajout d'une fiche (d'une ligne).
La recherche sur le champ id sera accélérée car celle-ci est déclarée clé primaire.

Utilisation d'une base

Vous êtes dans la fenêtre DOS et vous avez appelé le programme mysql afin d'obtenir le prompt "mysql>"

Il reste à remplir la table listecd. Commençons par ajouter le CD ayant pour nom "Le plein de tubes" et comme description "compilation de 1994".

use mescd;
insert into listecd values('Le plein de tubes','compilation de 1994',1);
select * from listecd where 1;

Ligne 2 : insert into listecd permet d'ajouter une ligne à la table listecd.
values est suivi des valeurs à mettre dans les champs en respectant l'ordre.
Ligne 3 : Cette ligne n'est pas nécessaire. Elle permet seulement de voir toute la table (* veut dire tous les champs, donc toutes les colonnes).
where suivi d'une condition permettrait de ne voir que les lignes répondant à un certain critère. 1 correspondant à vrai, en mettant where 1 cela signifie que l'on veut toutes les lignes. Il n'est pas nécessaire de mettre where 1.

Il nous reste à créer la table contenant la liste des titres de ce CD. Je propose d'utiliser comme nom de table la lettre t suivie du numéro contenu dans id. Dans notre cas, il s'agit de t1.

create table t1(titre varchar(50),auteur varchar(30),duree time);
insert into t1 values('Hey Joe','Jimi Hendrix','0:4:1');
insert into t1 values('Pour un flirt','Michel Delpech','0:3:24');
insert into t1 values('Ordinaire','Robert Charlebois','0:5:21');

Etc.

Limiter l'accès à une base

Dans la suite, nous allons utiliser PHP pour accéder aux bases mysql. Le fichier php va donc devoir connaître le mot de passe de l'utilisateur (actuellement root) autorisé à utiliser les bases. Si vous êtes le seul à avoir accès au contenu du fichier php, vous n'avez pas besoin de limiter l'accès.

Nous allons supposer que vous ne pouvez pas tout faire et que vous laissez une autre personne réaliser le sous-site qui va gérer la base mescd. Soit Lemaitre le nom de cette personne.

L'utilisateur doit exister dans "Utilisateurs et ordinateurs active directory" si ce n'est pas le cas, créez-le.
Lemaitre doit avoir un droit d'écriture dans le répertoire Web ou avoir accès par ftp à ce répertoire afin de pouvoir modifier les fichiers php.

Création d'un compte ayant des droits sur la base lescd

grant all privileges on mescd.* to 'lemaitre' identified by '123';

Cette ligne signifie accorder (grant) tous les privilèges pour l'utilisation des tables de mescd (mescd.*) à l'utilisateur nommé lemaitre. L'utilisateur est créé et le mot de passe 123 lui est attribué.

Pour voir ce qui vient d'être fait vous pouvez taper

use mysql
select * from user;
select * from db;

L'affichage est un peu confus car les lignes dépassent les lignes écran. Voici une partie du résultat :

On constate que lemaitre est un utilisateur déclaré dans mysql mais qu'il n'a pas de droit sur la base mysql (que des N dans le fichier user).
Alors que lemaitre a presque tous les droits sur la base mescd. Il lui manque seulement le privilège "Grant_priv" afin de ne pas lui permettre d'attribuer des privilèges (un N dans le fichier db).

Le même travail aurait pu être fait en ajoutant les lignes dans les tables user et db à l'aide d'instruction insert mais il aurait fallu demander au service mysql de prendre ces modifications en compte soit en l'arrêtant et en le redémarrant ou mieux en utilisant l'instruction Flush privileges.

Lorsqu'une ligne est longue, il est possible de taper sur entrée et de la continuer à la ligne suivante. C'est le point-virgule qui permet à mysql de savoir que l'instruction est terminée.

Donnez à l'utilisateur lemaitre son mot de passe mysql (123), le nom de la base (mescd). Donnez-lui éventuellement le programme mysql.exe et idiquez-lui que sa base est sur le serveur nommé SERV
Il pourra à partir d'une station quelconque, utiliser le programme mysql en tapant dans une fenêtre DOS.

mysql -h serv -u lemaitre -p

Lorsque le mot de passe sera tapé, il pourra continuer comme s'il était sur le serveur mais avec des droits limités à la base mescd.

use mescd;
show tables;

 

 
PHP et MySQL
 

Comme vous l'avez certainement remarqué aux paragraphes précédents, il est assez fastidieux de créer des tables et de les remplir. Grâce à PHP, nous allons pouvoir automatiser une partie du travail.

Prise en main

Le travail se complique car nous allons non seulement utiliser du php pour envoyer de l'html au navigateur mais nous allons utiliser des mots de php qui permettent de travailler sur les bases de mysql.
Dans l'exemple suivant tous les mots commençant par mysql_ sont des ordres PHP qui permettent d'agir sur les bases de mysql.
Vous retrouverez la significations de ces mots dans l'aide PHP (fichier doc.php.nexen.pdf).

Editez un fichier php (par exemple index.php situé dans le répertoire lycee). Pour cela on pourra utiliser le bloc-notes ou profiter de l'éditeur PHP. Ne mettez pas les numéros de lignes.

1  <?php

2  $res=mysql_connect('localhost','lemaitre','123')
      or die("Erreur connexion au serveur mysql");
3  $resultat=mysql_list_tables("mescd");
4  for ($i=0;$i<mysql_num_rows($resultat);$i++){
5    echo mysql_tablename($resultat,$i)."<BR>";
6  }
7  mysql_close($res);

8  ?>

Ligne 2 : mysql_connect est la première chose à faire pour se connecter au serveur mysql. On pourra remarquer que le nom du serveur est "localhost" alors que la page php peut être appelée à partir de n'importe quel ordinateur. C'est tout à fait normal car, pour le programme php qui exécute l'ordre, mysql est sur le même ordinateur que lui.
"or die" est utilisé pour arrêter l'exécution si une erreur s'est produite. Le message passé dans les parenthèses sera alors envoyé au navigateur.
Le résultat est placé dans la variable $res (on aurait pu choisir un autre nom de variable). $res est en fait le numéro de la ressource qui va nous permettre d'accéder au serveur mysql.

Ligne 3 : mysql_list_tables place dans la variable $resultat (on aurait pu choisir un autre nom de variable) le numéro de ressource qui permettra aux instructions comme mysql_tablename ou mysql_fetch_array de retrouver le nom des tables.

Lorsque la ligne 3 est faite, on peut utiliser $resultat :
  mysql_tablename($resultat,0) contient le nom de la première table.
  mysql_tablename($resultat,1) contient le nom de la deuxième table.
  mysql_tablename($resultat,2) contient le nom de la troisième table.

  mysql_num_rows($resultat) permet de connaître le nombre de lignes du tableau correspondant à $resultat.

Ligne 4 et 6 : La variable $i (on aurait pu choisir un autre nom de variable) va prendre la valeur 0 puis, si elle est inférieure au nombre de lignes du tableau, va augmenter de 1 ($i++). Dans notre cas, puisque mescd contient pour l'instant 3 tables, $i va varier de 0 à 2.

Ligne 5 : Cette ligne est exécutée pour chaque valeur de $i et envoie le nom des tables dans le navigateur.

Afficher le contenu d'une table

Nous allons créer un fichier php qui va demander à PHP de se connecter au serveur mysql, puis d'utiliser la base "mescd" puis de lire le contenu de la table "listecd" et enfin d'afficher chaque fiche (actuellement il n'y en a qu'une). Ne tapez pas les numéros de ligne.

1  $res=mysql_connect("localhost","lemaitre","123")
      or die("Erreur connexion au serveur mysql");
2  mysql_select_db("mescd");
3  $resultat=mysql_query("select * from listecd")
      or die("Impossible d'accéder à la table ".mysql_error());
4  $n=0;
5  while($lig=mysql_fetch_array($resultat)){
6     $n++;
7     echo "Fiche n°".$n."<BR>";
8     echo $lig["nom"]."<BR>";
9     echo $lig["description"]."<BR>";
10    echo $lig["id"]."<BR>";
11    echo "<BR>";
12 } // while
13 mysql_free_result($resultat);
14 mysql_close($res);

Ligne 1 : Connexion au serveur Mysql avec le compte lemaitre qui a des droits sur la base "mescd".
Ligne 2 : Utilisation de la base "mescd" (en langage MySql, on aurait tapé use mescd)
Ligne 3 : mysql_query est une instruction qui permet d'interroger la base. Ce qui est placé dans les parenthèses est un ordre qui aurait pu être tapé tel quel dans MySql.
On pourra remarquer qu'il a été ajouté mysql_error() afin d'avoir un message plus précis en cas d'erreur.
Ligne 4 : Initialisation de la variable $n qui permettra simplement d'afficher le numéro de la fiche.
Ligne 5 : mysql_fetch_array est une instruction qui permet de récupérer un numéro de ressource qui pointe vers un tableau contenant une ligne de la table. $lig vaut faux lorsqu'il n'y a plus de ligne à lire dans la table. L'instruction While permet donc de parcourir toutes les lignes de la table et de s'arrêter lorsqu'il n'y a plus de ligne à lire.
Ligne 6 : $n est augmenté de 1.
Ligne 7 : Affichage du numéro de la fiche.
Lignes 8 à 10 : $lig est un tableau d'une ligne composé d'autant de colonnes qu'il y a de champs dans la table (on a fait select * pour obtenir tous les champs). $lig["nom"] pourrait être remplacé par $lig[0]. De même $lig["description"] pourrait être remplacé par $lig[1] etc.
Ligne 11 : On passe une ligne (si on avait plusieurs fiches dans la table, la présentation serait améliorée).
Ligne 12 : fin du while.
Ligne 13 : On libère la ressource $resultat
Ligne 14 : On ferme le fichier

Exercice 2

Complétez le programme précédent pour afficher la table t1

Interaction entre navigateur et php

Pour l'instant l'utilisateur n'a pas pu répondre à une question ou faire un choix dans une liste... Pour permettre à l'utilisateur d'envoyer une information au serveur, on utilise un formulaire. Le navigateur recevra la balise <FORM> suivie d'instructions spéciales et de la balise de fin </FORM>.

Créez dans F:\web\html\lycee un fichier index2.php dans lequel vous mettrez :

<HTML>
<BODY>
</BODY>
<FORM ACTION="affiche.php" METHOD="POST">
Quel est ton nom ? <INPUT NAME="lenom" TYPE="text">
<INPUT TYPE="submit" VALUE="envoyer">
</FORM>

Ce fichier pourrait également s'appeler index2.htm car il ne contient pas de code php.

ACTION permet d'indiquer ce qui doit être fait lorsque l'utilisateur cliquera sur le bouton "Envoyer". La page affiche.php située dans le même répertoire que index2.php sera appelée avec un passage de paramètre. En supposant que l'utilisateur ait tapé Dupond, lorsque le bouton "envoyer" sera utilisé, la page affiche.php sera appelé de la façon suivante :
affiche.php?lenom=Dupond

Créez dans le même répertoire un fichier affiche.php dans lequel vous mettrez :

<?php
Echo $lenom."<BR>";

?>

<a href=index2.php>Retour</a>

Le paramètre passé à affiche.php sera utilisable dans le code php de affiche.php. On remarquera que l'appel s'est fait avec lenom alors que dans affiche.php, c'est $lenom qu'il faut utiliser.
La dernière ligne permet simplement à l'utilisateur de revenir à la page index2.php.

 

 
Portail claroline
 

Sécurité

Claroline nécessite un accès avec un compte ayant tous les droits (root) à la base mysql. Si vous n'êtes pas le seul à avoir accès aux répertoire web de votre serveur, il sera important de prendre les précautions suivantes :

- Le répertoire de claroline ne doit être accessible que par vous (par exemple en tant qu'administrateur sur le serveur). S'il est visible par le voisinage réseau, il ne devra être accessible que par vous. 

- A partir des répertoires web des autres utilisateurs il ne faudra pas pouvoir lire les fichiers de claroline (le fichier config.php contient en clair le mot de passe de root).
Comme nous avons paramétré php.ini avec "open_basedir = .." il ne faut pas qu'une personne ayant le droit de placer des fichiers php sur le serveur ait accès à un répertoire qui a pour répertoire père un répertoire contenant le répertoire de claroline.

Un exemple dangereux pour mieux comprendre :
Chemin pour claroline : F:\web\claro
Chemin pour le répertoire web de dupond : F:\web\dupond
Si dupond place ce code dans un fichier php de son répertoire, il pourra connaître le mot de passe de root

$fich="../claro/claroline/include/config.php";
echo "Lecture du fichier $fich<BR>";
$f=fopen($fich,"r");
if ($f){
   while (!feof($f)){
      $r=fgets($f);
      echo $r."<BR>";
   }
   fclose($f);
}

Un bon exemple où ce risque n'existe pas :
Chemin pour claroline : F:\web\claro
Chemin pour le répertoire web de dupond : F:\web\html\dupond
Pour accéder aux répertoires de claro, Dupond devrait remonter de deux répertoires ce qui lui est interdit.

Installation

Téléchargez Claroline

http://www.icampus.ucl.ac.be/download/claroline/

En cas de problème vous pouvez également le trouver ici : claroline130.zip

L'installation consiste à créer un répertoire web (en le nommant par exemple claro) et à décompresser le fichier téléchargé dans ce répertoire.

Vous pouvez par exemple créer le répertoire Claro dans F:\web

F:\web\claro

Faites un clic droit sur claro afin de créer un partage web. L'accès à ce site se fera donc par http://serv/claro

Le répertoire claro et tout ce qu'il contient devront être accessible au compte IUSR_SERV avec l'accès modifier. (C'est le cas si vous avez suivi les conseils donnés au début de ce document. Si ce n'est pas le cas, reportez-vous au paragraphe sur le sécurité au début de ce document).

Paramétrage

Appelez la page

http://serv/claro/claroline/install

et répondez aux questions en particulier indiquez le mot de passe de root (1234).

L'installation a créer le fichier config.php dans claro/claroline/include
Vous êtes informé qu'il faut mettre ce fichier en lecture seule. En effet sans cette précaution n'importe qui pourrait refaire l'installation.

Changez la sécurité sur config.php
Faites un clic droit sur config.php allez dans "Sécurité". Enlevez la coche devant "Permettre aux autorisations...." puis choisissez "Copier". Pour le compte IUSR_SERV laissez seulement les coches devant "Lecture et exécution" et "Lecture".

Utilisation

Les utilisateurs accèderont à claroline en tapant

http://serv/claro

 

 
Bii
 

Installation

Décompressez le fichier bii.zip.

Placez le répertoire bii par exemple dans F:\web
   F:\web\bii
Effectuez un "partage web" de bii en laissant comme alias bii.

Comme pour le répertoire claro il est nécessaire de donner à IUSR_SERV le droit de modifier  (C'est le cas si vous avez suivi les conseils donnés au début de ce document. Si ce n'est pas le cas, reportez-vous au paragraphe sur le sécurité au début de ce document).

A partir d'une station (ou du serveur) utilisez le navigateur et tapez http://serv/bii/admin/install.php

Donnez le mot de passe de root et créez la base bii.

Par défaut bii est paramétré pour fonctionner avec root sans mot de passe. Le compte root, nécessaire lors de la création de la base bii, n'est plus nécessaire pour une utilisation normale. Nous allons créer un compte mysql spécial pour bii.

Sur le serveur dans une fenêtre dos, placez-vous dans C:\mysql\bin et tapez :

mysql -u root -p
grant all on bii.* for 'adminbii' identified by 'passbii';
exit;

Vous remplacerez bien sûr adminbii et passbii par ce que vous voulez

Vous venez de créer le compte adminbii avec le mot de passe passbii et ce compte a obtenu tous les droits sur toutes les tables de la base bii.

Il reste à modifier le fichier F:\www\bii\inc\entete.php en modifiant les deux lignes $user et $password :

$user = "adminbii"
$password = "passbii"

 

 
PhpMyAdmin
 

Il s'agit d'un outil très pratique qui permet de voir et de modifier les bases gérées par MySQL.

Installation

Allez sur le site de php http://www.phpmyadmin.net/
Téléchargez le dernier PhpMyAdmin pour windows.

Vous pouvez également télécharger la version 2.4.0 ici : phpMyAdmin-2.4.0-php.zip

Décompressez le fichier dans un répertoire web (par exemple dans C:\Inetpub\wwwroot).
Renommez le répertoire phpMyAdmin-2.4.0-php en phpMyAdmin, ce sera plus simple.

Paramétrage

Ouvrez C:\inetpub\wwwroot\PhpMyAdmin\config.inc.php à l'aide de PPHPEdit ou de Wordpad (le bloc-notes ne donnerait pas un affichage correct).

Pour comprendre le fonctionnement de ce fichier, il est important de commencer par repérer la ligne

$i = 0;

On retrouve plus loin $i++ à plusieurs reprises ($i++ signifie augmenter la variable $i de 1)

$i++;

Entre le premier $i++ et le suivant, la valeur de $i est de 1.
Après le deuxième $i++ et avant le troisième la valeur de $i est de 2 etc.

Dans la zone où $i vaut 1, remplacez simplement 'config' par 'cookie'
Voici les quelques lignes importantes après modification

$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL hostname
$cfg['Servers'][$i]['auth_type'] = 'cookie'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed
$cfg['Servers'][$i]['only_db'] = ''; // If set to a db-name, only

Supposons que l'on souhaite donner la responsabilité de la base bii à une autre personne. Il sera pratique pour elle de pouvoir utiliser PhpMyAdmin mais vous ne voulez pas que cette personne ait accès à toutes les autres bases.

Lors de l'installation de bii, nous avons créé à l'aide de l'instruction grant le compte 'adminbii' avec le mot de passe 'passbii'.

Dans la partie où $i vaut 2 de config.inc.php (donc après le deuxième $i++;) ajoutez 'localhost', remplacez 'config' par 'cookie' remplacez root par adminbii et mettez le nom de la base 'bii' comme dans les lignes suivantes :

$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'adminbii';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['only_db'] = 'bii';

Enregistrez

Utilisation

A partir du serveur ou d'une station tapez dans le navigateur

http://serv/PhpMyAdmin

Vous êtes alors invité à donner un nom et un mot de passe

Si vous donnez 'root' et '1234' vous aurez accès à toutes les bases de données de MySql sans restriction.
Si vous donnez 'adminbii' et 'passbii' vous ne verrez que la base bii et n'aurez accès qu'à elle.

Evitez de laisser Windows retenir le mot de passe surtout si votre ordinateur risque d'être utilisé par d'autres personnes.


Auteur A. Sayer
andre.sayer@ac-reims.fr