Conception de sites Web TP n o 5 Objectif : Dans ce TP, vous mettrez en œuvre le langage PHP afin de gérer, entre autres, un compteur de visites, le formulaire que vous avez intégré à votre blog ainsi que les cookies. Préalable Activation de votre site Le module UserDir du serveur Web Apache permet à tous les utilisateurs de la machine de publier des documents. Pour cela ils possèdent un sous-répertoire appelé public_html dans leur répertoire personnel. Les fichiers placés dans ce répertoire seront, pour un utilisateur donné, accessibles à l adresse : http://le_serveur/~utilisateur. Afin de l activer, entrez sur un terminal les commandes suivantes 1 sudo a2enmod userdir sudo service apache2 restart mkdir ~/public_html chmod -R 755 ~/public_html Déplacez l ensemble des fichiers de votre blog à la racine du répertoire public_html et vérifiez que votre page d accueil s appelle index.html, ou encore index.htm ou index.php. Votre blog est alors disponible à l adresse : http://votre_adresse_ip/~etudiant Vérifiez que vous pouvez y accéder depuis le navigateur. Vérification de la présence du module PHP Créez le fichier bonjour.php qui contiendra le code suivant : <!php $message = "Bonjour à vous"; <title>test du module PHP</title> <p> echo $message; </p> 1. Vous serez certainement contraints de modifier plusieurs fois de suite les permissions de ce répertoire dès que vous y ajouterez un nouveau fichier ou répertoire. 11
Placez ce fichier à la racine de votre site et vérifiez que ce fichier est exécutable. Vérifiez que vous pouvez y accéder à l adresse : http://votre_adresse_ip/~etudiant/bonjour.php. Si rien ne s affiche sur votre navigateur, c est peut-être que le module PHP du serveur Web Apache n a pas été activé. Afin de l activer, exécutez dans un terminal les commandes suivantes : sudo a2enmod php5 ; sudo service apache2 restart Variables superglobales Un certain nombre de variables internes, appelées variables superglobales, sont toujours disponibles, quel que soit le contexte. Le tableau suivant regroupe ces différentes variables. Variable $GLOBALS $_SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION $_REQUEST $_ENV Description Référence toutes les superglobales disponibles Variables de serveur et d exécution Valeurs passées au script courant via les paramètres d URL Valeurs passées au script courant via le protocole HTTP et la méthode POST Valeurs téléchargées au script courant via le protocole HTTP et la méthode POST Variables passées au script courant via des cookies Valeurs stockées dans les sessions et accessible au script courant Contenu des variables $_GET, $_POST et $_COOKIE Référence la variable passé au script courant via la méthode d environnement 1 Informations pour le visiteur Utilisez la variable superglobale $_SERVER afin de retourner au visiteur une page HTML comprenant, dans des paragraphes consécutifs, les informations qui concernent : 1 Le serveur 2 Le client le nom du serveur ( SERVER_NAME ) ; l adresse IP du serveur ( SERVER_ADDR ) ; le port de la machine serveur utilisé pour les communications ( SERVER_PORT ) ; l identification du logiciel serveur ( SERVER_SOFTWARE ) ; le protocole de communication et sa version ( SERVER_PROTOCOL ) ; la valeur donnée à la directive SERVER_ADMIN d Apache ( SERVER_ADMIN ) ; l adresse IP du visiteur qui demande la page courante ( REMOTE_ADDR ) ; le nom de la machine cliente ( REMOTE_HOST ) ; le port utilisé par la machine cliente pour communiquer avec le serveur Web ( REMOTE_PORT ) ; la description du navigateur client ( HTTP_USER_AGENT ) ; l utilisateur s il est authentifié ( REMOTE_USER ) ; l utilisateur authentifié si la requête a été redirigée en interne ( REDIRECT_REMOTE_USER ) ; 22
3 Le script courant son nom ( SCRIPT_NAME ) ; le chemin absolu vers le fichier qui le contient ( SCRIPT_FILENAME ) ; la racine depuis laquelle il est exécuté ( DOCUMENT_ROOT ) ; l URI 2 qui a été fourni pour accéder à cette page ( REQUEST_URI ) ; informations sur le nom du chemin fourni par le client ( PATH_INFO ) l adresse de la page qui a conduit le client à la page courante ( HTTP_REFERER ) ; 4 Les caractéristiques de l échange la méthode de requête utilisée pour accéder à la page ( REQUEST_METHOD ) ; la chaîne de requête, si elle existe, qui est utilisée pour accéder à la page ( QUERY_STRING ) ; le contenu de l en-tête Host: de la requête courante ( HTTP_HOST ) ; le contenu de l en-tête Accept: de la requête courante ( HTTP_ACCEPT ) ; les codages de caractères acceptés par la requête courante ( HTTP_ACCEPT_CHARSET ) ; les compressions acceptées par la requête courante ( HTTP_ACCEPT_ENCODING ) ; les langues acceptées par la requête courante ( HTTP_ACCEPT_LANGUAGE ) ; le temps Unix du début de la requête (REQUEST_TIME) ; PHP et les fichiers PHP propose un certain nombre de fonctions permettant de manipuler des fichiers côté serveur. Le script suivant réalise la lecture du fichier esope.txt qui se trouve dans le sous-répertoire ressources placé à la racine du site et affiche son contenu sur le navigateur du visiteur. if (!$fp = fopen( "/ressources/esope.txt","r" ) ) { echo "Echec d ouverture du fichier"; else { $contenu = ""; while (!feof( $fp ) ) { $ligne = fgets( $fp, 255 ); $contenu.= $ligne. "<br>"; fclose($fp); echo "<p>". $contenu. "</p>"; 2 Un compteur de visites simple 2. Uniform Resource Identifier 33
Créez un compteur de visites qui sera placé sur la page d accueil de votre blog. Les visites seront comptabilisées dans le fichier compteur.num placé à la racine du site. Remarque Le compteur de visites s incrémente à chaque rechargement de la page d accueil par un même visiteur, ce qui fausse le comptage. Pour palier à ce problème, on peut créer un cookie avec une durée de vie de 24 h, puis on vérifie l existence de ce cookie chez le visiteur. S il n en a pas, on incrémente le compteur puis on ajoute le cookie, et s il en a déjà un on ne fais rien. Dans l exercice 6, vous réaliserez cette amélioration de votre compteur. Gestion du formulaire Considérons l exemple suivant d une page qui contient un formulaire minimal faisant appel au fichier traitement.php présent à la racine sur le serveur lorsque le visiteur effectue la soumission. L envoi du formulaire s effectue par l intermédiaire de la méthode GET. <title>formulaire</title> <form action="traitement.php" method="get"> <p>votre nom : <input type="text" name="nom" /></p> <p><input type="submit" value="soumettre" /></p> </form> Le fichier traitement.php ci-dessous se contente de retourner une page HTML avec le nom fourni par le visiteur. <title>réponse au nouveau visiteur</title> <p>bonjour <mark> echo $_GET[ nom ] </mark></p> 3 Méthodes GET et POST Testez l exemple précédent et remarquez la présence du champ nom et de sa valeur à la suite du nom du fichier traitement.php dans la barre d adresse du navigateur (le passage des informations s effectue avec le format suivant : «fichier.php?champ1=valeur1&champ2=valeur2&...»). Modifiez l exemple 44
afin d utiliser la méthode POST puis comparez. 4 Premier traitement du formulaire blog Réalisez votre propre fichier traitement.php adaptée aux différents champs de votre formulaire et retournant une page avec l ensemble des informations entrées dans le formulaire par le visiteur. 5 Deuxième traitement du formulaire blog Proposez des réponses personnalisées en fonction du visiteur qui a rempli le formulaire. Dans l exemple suivant, seul le visiteur ayant entré un mot de passe correct se voit retourner une page d information. <meta charset="utf-8" /> <title>mon blog</title> /* En cas de mot de passe correct on affiche les données */ if (isset($_post[ mot_de_passe ]) AND $_POST[ mot_de_passe ] == "hztdgvd65") { <h1>données sensibles</h1> <section> <h2>titre section</h2> <article> <h2>titre article</h2> <p><i>sed cautela...</i></p> </article> </section> else { /* Sinon, on affiche un message d erreur */ echo <p>mot de passe incorrect</p> ; Cookies Les cookies sont des petits fichiers stockés sur la machine du visiteur et qui permettent de conserver des renseignements utiles sur chaque utilisateur. Les cookies sont créés à l aide de la fonction setcookie. Ils ont un nom, une valeur et une date d expiration. 6 Un compteur de visites plus efficace À partir de la remarque faite dans l exercice 2, proposez un compteur de visites amélioré en utilisant un cookie. Vous pourrez utiliser la fonction time qui retourne l heure courante, mesurée en secondes depuis le début de l époque Unix, (1er janvier 1970 00 :00 :00 GMT). 55