Client/Serveur Internet Conception de pages dynamiques

Slides:



Advertisements
Présentations similaires
GESTION D’IMPRISSION SOUS WINDOWS & LINUX
Advertisements

TOUQUET Arnaud ▪ GI05 BLONDEEL Igor ▪ GM05
Internet : serveurs Web
Internet.
- Couche 7 - Couche application. Sommaire 1)Introduction 1)DNS 1)FTP et TFTP 1)HTTP 1)SNMP 1)SMTP 1)Telnet.
LA TECHNOLOGIE WAP WIRLESS APPLICATION PROTOCOL Arnaud MERGEY Davy RIBOUD David ZAMORA DESS RESEAUX 2000/2001.
Exposé de Système - Informatique et Réseau
APACHE HTTP SERVER Formation TRANSFER ALGER Mai 2002.
TRANSFER Alger – Serveur Web Nicolas Larrousse Septembre Petit historique du Worl Wide Web Notion dHypertexte Extension à internet par Tim Berners.
INTRODUCTION A JAVA Chapitre 1 : Introduction
HTML Les types de balises
TP 3-4 BD21.
Client/Serveur Internet Conception de pages dynamiques
INTRODUCTION AUX RESEAUX
Classer, archiver, traiter son courrier électronique Listes des dossiers crées.
Windows XP Professionnel
Windows XP Professionnel
Journées départementales des documentalistes 23 janvier 2006
Cette petite animation a été créée pour que vous sachiez comment le Lycée des Métiers « Jules Verne » gère sa communication électronique, comment on accède.
Introduction – Le bureau La visualisation des dossiers et des fichiers La gestion des dossiers et des fichiers Création dun nouveau dossier (méthode 1)
JDBC: manipuler une base de données en Java IFT6800 – E 2007 Jian-Yun Nie.
Kit formation entreprise Salle des marchés publics e-bourgogne (V2.1) 1 ère Partie : Comment sinscrire sur e-bourgogne ? Accéder à la plate-forme e-bourgogne.
Publication Flash sur Internet et Transfert avec Dreamweaver COM3562 Communication Multimédia MARS 2011.
Notions sur les réseaux
La Messagerie du Lycée Pierre Mendès France
Baccalauréat professionnel
Enesys RS Data Extension
1 vidéogramme séance 2 du 13 février 2012 Micro Informatique au Cellier Joseph HOHN Séance du 13 février 2012 Sur le thème de Découverte de lordinateur.
Systèmes d’exploitation
Common Gateway Interface
Le Téléphone Russe Le Téléphone Russe. Le Téléphone Russe Le Téléphone Russe.
Comprendre l’environnement Web
Langages du Web Sémantique
Lycée Louis Vincent Séance 1
La programmation objet Illustration de la POO en Pascal
Les instructions PHP pour l'accès à une base de données MySql
Les Services de Messagerie
Les relations clients - serveurs
Architecture Logicielle Les supports d’applications
Services fournis par le SI et technologies associées
Cours N°2 Base de Données & Langage SQL
Introduction au WebMapping
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
PhP-MySQL Pagora 2012/2013 CTD 1 - Presentation de moi ^^
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
Initiation au web dynamique
PHP & My SQL.
JavaScript.
Les Services de Messagerie
0 Objectifs de la session n°1  Revenir sur toutes les bases théoriques nécessaires pour devenir un développeur Web,  Découvrir l’ensemble des langages.
Les réseaux - Internet Historique Réseau local Internet Les protocoles
Cours de programmation web
Internet : serveurs Web  Clients et serveurs : le navigateur  Sites Web et urls  Fichier source d’une page  Langage HTML 1.
 Syntaxe du langage PHP
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Application de gestion des retards
Présentation De NetAlert
Auvray Vincent Blanchy François Bonmariage Nicolas Mélon Laurent
Installation et Configuration Internet Information Server (IIS 6)
INTERNET heg eid Avril-juin 2001 A.Rezzonico.
Module : Pages Web Dynamiques (Production Électronique Avancée)
 Formulaires HTML : traiter les entrées utilisateur
Initiation au JavaScript
Deug 11 Systèmes d ’Information : 5a Michel de Rougemont Université Paris II Les Formulaires.
Apache serveur web.
CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003.
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
1 Programmation Web Programmation WAMP/LAMP Premiers principes.
Téléchargement de fichiers
HTTP DNS NTP FTP R231 RJ45 definition HTTP DNS NTP FTP R231 RJ45.
Transcription de la présentation:

Client/Serveur Internet Conception de pages dynamiques Jean-Marc Thévenin Laurent Perrussel {thevenin,perussel}@univ-tlse1.fr

Plan du Cours I/ Introduction II/ Architecture Client/Serveur dans Internet III/ Configuration d’un serveur HTTPD IV/ Conception de Pages Dynamiques V/ Le Langage PHP VI/ Interactions avec une Base de Données VII/ Saisie d’Informations sur Plusieurs Pages

I/ Introduction 1/ Architecture client/serveur Internet 2/ Lien avec le cours de conception de pages HTML 3/ Les pages HTML dynamiques

I.1/ Arch. client/serveur Internet Rôle du client ? Programme permettant de demander des données ou des services à une autre machine données : pages, messages, fichiers services : programme s’exécutant sur une machine distante (exemple : HotMail) le client doit connaître la seconde machine la seconde machine s’appelle un Serveur

I.1/ Architecture client/serveur Internet Trois types de client ? Navigateur de pages Web : Netscape, MS Internet Explorer, Word... logiciel de messagerie électronique : Eudora, Outlook Express, Netscape, Word… logiciel de transfert de fichiers : WS-FTP, MS Internet Explorer, Word…

I.1/ Arch. client/serveur Internet (suite) Rôle du serveur : Programme qui attend, traite et répond à des requêtes provenant de clients localisés sur des machines distantes Rappel : une requête peut concerner des données et/ou un service.

I.1/ Arch. client/serveur Internet (suite) Trois types de serveur : Serveur de pages Web : Apache, Microsoft Server, Netscape Server… Serveur de messagerie : SendMail, Microsoft Exchange… Serveur FTP : WU-FTP

I.1/ Arch. client/serveur Internet (suite) Une Transaction Type a) le client, un navigateur, demande une page à un serveur Web. b) le serveur, qui attendait reçoit la requête et cherche la page sur sa machine. c) le serveur envoie la page au client et attend à nouveau. Client (Navigator) a) c) b) Fichiers (pages) Serveur (Apache)

I.2/ Lien avec le cours de conception de pages HTML Dreamweaver : éditions de pages Pour rendre ces pages accessibles il faut : définir le fonctionnement du serveur (URL, autorisations, organisation des répertoires...) publier ces pages, i.e. stockage dans les répertoires adaptés

I.2/ Lien avec le cours … (suite) Dreamweaver : conception de la structure de pages et de formulaires (aspect statique) Nécessité de prendre en compte les aspects dynamiques : associer des instructions au(x) bouton(s) récupérer et traiter les données saisies interaction avec une base de données génération de pages pour afficher des résultats

I.3/ Les pages dynamiques Transaction type client : saisie de données dans un formulaire et envoi réception de la page générée dynamiquement et affichage Serveur réception des données génération d’une page en fonction des données reçues envoi de cette page

I.3/ Les pages dynamiques (suite) Génération de pages effectuée sur le serveur programme de génération souvent appelé CGI (Common Gateway Interface) le programme interagit avec le serveur (E/S) et éventuellement d’autres programmes et/ou un serveur de bases de données

I.3/ Les pages dynamiques (suite) Objectif du cours génération de pages HTML conditionnées par des paramètres écriture de CGI simples accédant à une base de données relationnelle

II/ Architecture Client/Serveur dans Internet 1/ Introduction 2/ Dans le contexte HTTP 3/ Dans le contexte du Mail 4/ Dans le contexte des News

II.1/ Introduction Internet / Intranet / Extranet Internet ensemble de machines interconnectées selon le protocole de communication TCP/IP . Les machines ont un nom et sont dans un domaine (ex : igsi.univ-tlse1.fr). Différents services offerts : sites web, accès distant à des documents, courrier électronique, forums de discussion

II.1/ Introduction (suite) Internet / Intranet / Extranet Intranet C ’est une « sous-partie » d’Internet Réseau privé et donc inaccessible de l ’extérieur (i.e. Internet) pour des raisons de sécurité limitation à un domaine ex : univ-tlse1.fr Utilisé pour le fonctionnement d’une organisation (ex : Citroën)

II.1/ Introduction (suite) Internet / Intranet / Extranet Extranet C ’est une « sous-partie » d’Internet Réseau privé et donc inaccessible de l ’extérieur (i.e. Internet) pour des raisons de sécurité limitation à quelques machines utilisé pour relier une entreprise avec ses partenaires (ex: suivi de commandes). Intranet et Extranet font souvent partie du S.I. de l ’entreprise

II.1/ Introduction (suite) TCP/IP Transmission Control Protocol / Internet Protocol Circulation des données par paquets le message est découpé en paquets. Chaque paquet est envoyé à un nœud qui renvoie vers un autre nœud suivant l’encombrement. A l’arrivée, les paquets sont réordonnés Message = P1 + P2 Système A P1, P2 P2 P1 P2 P1 Système B

II.1/ Introduction (suite) TCP/IP Expéditeurs et Destinataires des paquets sont identifiées Numéro de machine : adresse IP ex 190.10.20.30 Nom complet de machine : www.lemonde.fr nom : www nom de domaine : lemonde.fr

II.1/ Introduction (suite) TCP/IP Fonctionnement des serveurs DNS Domain Name System association entre le nom d’une machine et son adresse IP Un serveur de noms par domaine Quand le nom accédé n’est pas dans le domaine, le serveur de nom local transfère la requête à un serveur de noms Internet

II.1/ Introduction (suite) Les URLs un protocole éventuellement un nom d’utilisateur suivi de @ un nom complet de machine éventuellement un nom de dossier et/ou de document ex news://news.cict.fr mailto://Jean-Marc.Thevenin@univ-tlse1.fr http://igsi.univ-tlse1.fr/igsi

II.1/ Introduction (suite) Les principaux protocoles http (et https) : pages HTML (et pages sécurisées) mailto : envoi de messages news : forums de discussion ftp : transfert de fichiers Chaque protocole est pris en charge par un service (un serveur)

II.2/ Client/Serveur HTTP HTTP : protocole permettant de demander et de recevoir des pages HTML auprès d’un serveur de pages localisé sur une machine distante le serveur est désigné sous le nom de HTTPD : démon HTTP

II.2/ Client/Serveur HTTP (suite) Principaux HTTPD Apache (Unix, Windows, MacOS X...) Microsoft Personal Web Server (Win) Microsoft Site Server (Win NT) Netscape iPlanet Web Server (Unix, NT…)

II.2/ Client/Serveur HTTP (suite) Transaction type avec une page limitée à du texte http://uneMachine.unDomaine.fr/undossier/unePage.html 1. le serveur sur la machine uneMachine.unDomaine.fr reçoit la demande 2. le serveur associe à undossier le nom réel sur le disque. 3. Le serveur vérifie l’existence de la page et les droits d’accès 4. le serveur envoie la page unePage.html à la machine cliente 5. le serveur enregistre la transaction dans un journal

II.2/ Client/Serveur HTTP (suite) Zoom Etape 2 : associer undossier à un nom réel sur le disque. http://igsi.univ-tlse1.fr/~thevenin http://igsi.univ-tlse1.fr/~thevenin/p1.html /home /thevenin /public_html /index.html /p1.html Machine IGSI

II.2/ Client/Serveur HTTP (suite) Transaction type avec une page multimédia (texte + images + animations + …) http://uneMachine.unDomaine.fr/undossier/unePage.html A. le client demande la page et le serveur envoie le texte (étapes 1 à 5 précédemment) B. le client analyse la page et demande le chargement pour chacun des composants les étapes 1 à 5 sont répétées par le serveur pour chaque composant. Autrement dit, une requête d ’un client se traduit par un ensemble de transactions élémentaires

II.2/ Client/Serveur HTTP (suite) Transaction HTTPS transaction HTTP sécurisée Principes identiques aux transactions HTTP Communication Client/Serveur sécurisée par encodage des paquets.

II.2/ Client/Serveur HTTP (suite) Publication d’une page URL de la page http://uneMachine.unDomaine.fr/undossier/unePage.html transfert FTP du fichier unePage.html sur la machine uneMachine.unDomaine.fr dans le dossier associé au chemin undossier en lui donnant le même nom (unePage.html)

II.3/ Client/serveur Mail Client : lecture, stockage définitif et rédaction de messages Serveur : boite postale (stockage temporaire des messages) et envoi des messages. Deux serveurs distincts (entrée et sortie) chaque serveur peut être sur une machine distincte

II.3/ Client/serveur Mail (suite) rédaction du message adresse sujet corps envoi du message au serveur de courrier sortant Serveur Réception du message à envoyer envoi du message selon le protocole SMTP (Simple Mail Transfer Protocol) à l’adresse « adresse »

II.3/ Client/serveur Mail (suite) interrogation du serveur de courrier entrant (la boite au lettre), récupération des messages affichage des messages à la demande Serveur Réception du message et stockage dans une boite temporaire selon le protocole POP (Post Office Protocol) suppression dans la boite des messages transférés

II.3/ Client/serveur Mail (suite) Circulation des messages : texte documents attachés : encodés (binaire --> texte) client encode et décode expéditeur et destinataire doivent respecter la même convention d’encodage conventions usuelles : Mime, Uuencode, Base64

II.3/ Client/serveur Mail (suite) Principaux clients Eudora Netscape Messenger Outlook Pegasus elm Principaux Serveurs Sendmail iPlanet™ Messaging Server 5.0 (Netscape) Microsoft Exchange Server

Client/Serveur News News : forums de discussion thématique Principe envoi d’un message au serveur de forums le message est publié dans le forum lecture du forum par les utilisateurs les utilisateurs répondent au forum

Client/Serveur News (suite) Contrôle de la discussion publication sur le forum peut être modérée par un modérateur (administrateur) les forums peuvent être privés dans un intranet abonnement

Client/Serveur News (suite)

Client/Serveur News (suite) Rôle du lecteur de forums « Sélection » des forums préférés auprès de différents serveurs de forums Affichage des entêtes des messages du forum sélectionné Réception du corps du message sélectionné et affichage Envoi d’un message au serveur du forum sélectionné

Client/Serveur News (suite) Rôle du serveur de forums Stockage des messages dans les forums Gestion de l’archivage Envoi sur demande d’un client les entêtes des messages d’un forum Idem pour les corps des messages Publication des messages Synchronisation avec les autres serveurs de forums

III/ Configuration d’un serveur HTTPD 1/ Présentation de Apache 2/ Configuration de Apache 3/ Configuration des espaces publics/personnels 4/ Exercices dossier personnel et publication de pages autorisation consultation des journaux

III.1/ Présentation de Apache Serveur HTTP Plates-formes : Windows 9x/NT, Unix (Linux),… logiciel libre : programme source accessible et distribué avec la licence GNU Serveur rapide et stable utilisé sur plus de 6 millions de serveurs

III.1/ Présentation de Apache (suite) Site : www.apache.org (en anglais) Configuration utilisée machine : igsi système : linux apache : version 1.3.12-2

III.1/ Présentation de Apache (suite) Quelques fonctionnalités définition de l’administrateur gestion du nombre d’accès simultanés (nombre de transactions HTTP) surveillance des accès (journaux) organisation des répertoires contenant les pages du site définition des répertoires de pages personnelles droits d’accès généraux et personnels définition personnalisée des pages d’erreur pied de page personnalisé

III.2/ Configuration de Apache responsable : propriétaire (au sens unix) du logiciel définie dans le fichier /etc/httpd/httpd.conf configuration principale déléguer des configurations spécifiques en fonction des répertoires de pages

III.2/ Configuration de Apache (suite) Structure du fichier httpd.conf : document texte avec des lignes de commentaires et des lignes de configuration ligne de commentaire débute par un # ligne de configuration MotClef Valeur ex: # Adresse du fichier d’erreur ErrorLog /var/log/httpd/error_log

III.2/ Configuration de Apache (suite) Fichier httpd.conf chargé au lancement du processus HTTPD Généralement préconfiguré par défaut et très peu de choses à changer Toutes les options sont spécifiées : il suffit d ’enlever les commentaires pour les options choisies

III.2/ Configuration de Apache (suite) Principaux paramètres (présentés avec leur valeur par défaut) # Nombre de processus serveurs en // StartServers 8 # nom et groupe de l ’utilisateur executant HTTPD User nobody (droit du processus serveur) Group nobody # addresse de l ’administrateur # (ajoutée au pages générées ex 404). ServerAdmin root@localhost # Répertoire racine des pages du serveur DocumentRoot /home/httpd/html

III.2/ Configuration de Apache (suite) Preciser que le chargement par defaut est uniquement effectue si l ’url se conclue par un nom de repertoire Principaux paramètres (présentés avec leur valeur par défaut) # Répertoire racine d ’un utilisateur de la machine Userdir public_html => pour l’utilisateur ayant le login monLogin le répertoire racine est /home/monLogin/public_html et l’URL est http://uneMachine.unDomaine.fr/~monLogin # Page par défaut à charger dans un répertoire DirectoryIndex index.html index.htm index.cgi Preciser que le chargement par defaut est uniquement effectue si l ’url se conclue par un nom de repertoire

III.2/ Configuration de Apache (suite) Principaux paramètres concernant les journaux (présentés avec leur valeur par défaut) # fichier d’erreur ErrorLog /var/log/httpd/error_log # Niveau de journalisation des erreurs # (info, notice, error, alert,…) LogLevel warn # Fichier de journalisation des accès et niveau CustomLog /var/log/httpd/access_log common

III.3/ Configuration des espaces publics/personnels Mentionner le * dans le nom du repertoire décrit III.3/ Configuration des espaces publics/personnels Description des droits effectuée par répertoire droit d’exécuter des CGI droit à restreindre les accès droit de redéfinir les droits… Syntaxe # Droit pour le répertoire /home/*/public_html <Directory /home/*/html> (liste des droits) </Directory>

III.3/ Configuration des espaces publics/personnels (suite) Droit a redéfinir les droits, mentionnez que cette redefinition sera faite dans un fichier particulier. Redefinition de Options --> droit de définir les droits précédents. Quelques droits # Droit précisé avec le mot clef Option # None : aucun droit, all: tous les droits # FollowSymLinks, ExecCGI,… : droit particuliers # pouvant être combinés Options FollowSymLinks ExecCGI Indexes Droit à redéfinir les droits # Droit précisé avec le mot clef AllowOverride # Options, AuthConfig,… : droit particuliers AllowOverride AuthConfig

III.3/ Configuration des espaces publics/personnels (suite) Restriction d’accès au répertoire Autorisation ou restriction par machine ou domaine (autoriser quelques machines ou interdire quelques machines). Autoriser des individus ou des groupes d’individus (nom + mot de passe). combinaison des deux : quelques individus sur un sous-domaine (ex : intranet).

III.3/ Configuration des espaces publics/personnels (suite) Autoriser - Interdire quelques machines clauses allow from et deny from allow from nomDomaine1 nomDomaine2 … nomMachine1 nomMachine2 … adresseIP1 adresseIP3 … deny from nomDomaine1 nomDomaine2 … nomMachine1 nomMachine2 … adresseIP1 adresseIP3 … pour désigner toutes les machines : all Ordre d’application de la restriction clauses Order deny, allow et Order allow, deny

III.3/ Configuration des espaces publics/personnels (suite) Exemple : limiter au domaine de l’université allow from .univ-tlse1.fr deny from all Order deny, allow Exemple : interdire les accès de UT2 allow from all deny from .univ-tlse2.fr Order allow, deny Exemple : accès depuis une machine précise allow from igsi.univ-tlse1.fr

III.3/ Configuration des espaces publics/personnels (suite) Les personnes autorises n ’ont pas besoin d ’un compte UNIX III.3/ Configuration des espaces publics/personnels (suite) Limitation à quelques personnes nécessité d’un fichier (ou éventuellement une base de données) contenant les personnes autorisées couples nomLogin, MotDePasse Création du fichier htpasswd -c nomFichier premierLogin Ajout dans le fichier htpasswd nomFichier nouveauLogin

III.3/ Configuration des espaces publics/personnels (suite) Limitation à quelques personnes Directive pour spécifier le fichier des personnes autorisées (rappel : entre les balises <Directory> </Directory>) # Nom du fichier contenant les logins AuthUserFile nomFichier

III.3/ Configuration des espaces publics/personnels (suite) Limitation à un groupe de personnes Regrouper les personnes autorisées dans un groupe Les groupes sont référencés dans un fichier texte ayant la forme suivante nomGroupe1: nomLogin1 nomLogin2 nomLogin3 … nomGroupe2: nomLogin1 nomLogin2 nomLogin3 …

III.3/ Configuration des espaces publics/personnels (suite) Limitation à un groupe Directive pour spécifier le fichier des groupes autorisés (rappel : entre les balises <Directory> </Directory>) # Nom du fichier contenant les groupes AuthGroupFile nomFichier

III.3/ Configuration des espaces publics/personnels (suite) Configuration de l’espace personnel Autorisation de la configuration d ’un dossier est donné dans le httpd.conf avec la clause AllowOverride (cf. page préc.) La clause AccessFileName précise le nom du fichier de configuration particulier # Nom du fichier de configuration particulier # à rechercher AccessFileName .htaccess

III.3/ Configuration des espaces publics/personnels (suite) Configuration de l’espace personnel Pour configurer votre espace personnel créer le fichier /home/monLogin/public_html/.htaccess le fichier est un fichier texte contenant les clauses à l ’intérieur des balises <Directory> </Directory> (les balises ne doivent pas être mentionnées).

IV/ Conception de Pages Dynamiques 1/ Principe 2/ Transaction Type 3/ Exemple Perl - PHP 4/ CGI/PHP : Principales différences

IV.1/ Principe Deux Types de dynamique : La page générée par le serveur peut être dynamique Deux Types de dynamique : Dynamique prise en charge par le client Page animée Programme(s) exécuté(s) par le client prenant en charge la dynamique Dynamique prise en charge par le serveur Page créée dynamiquement par un programme exécuté sur le serveur Page statique affichée sur le client

IV.1/ Principe Dynamique dans les clients Applets Java Fonctions JavaScript Plug-In Composants ActiveX (Microsoft)

IV.1/ Principe (suite) Applets Java Programme exécuté par le client et dont l ’affichage est effectué dans un espace clos de la fenêtre Programme autonome dont le nom est représenté comme une URL dans la page d hôte Intérêt : Tous types d’affichage (graphique, interaction avec des images...) Applications exécutables dans la plupart des navigateurs.

IV.1/ Principe (suite) JavaScript fonctions de manipulation de la page Les instructions sont dans le source HTML Intérêt : Faire des contrôles sur des éléments d’un formulaire pour diminuer les dialogues entre le client et le serveur.

IV.1/ Principe (suite) Dynamique pris en charge par le serveur Récupérer et gérer des informations transmises par un client calcul, stockage dans une base de données,… Génération dynamique de pages Génération d’un fichier source HTML Affichage d’un résultat (interrogation d’une base de données)

IV.1/ Principe (suite) Génération du fichier source HTML Effectué par un programme indépendant appelé CGI Le programme peut être écrit dans de nombreux langages (Perl, Visual Basic, C, PL/SQL,…) Pré-traitement par le serveur HTTPD de fichiers HTML pré-existants comportant des instructions conditionnant la génération de lignes HTML langage PHP

IV.2/ Transaction Type Le client reçoit une page contenant un formulaire L’utilisateur clique sur Envoi après avoir garni les zones de saisie Le navigateur demande au serveur une URL associée au bouton Envoi tout en transmettant des couples <nomZone, valeurZone> l’URL contient le nom du CGI à exécuter

IV.2/ Transaction Type (Suite) Le serveur HTTPD reçoit l’URL et lance l’exécution du CGI mentionné dans l’URL en lui transmettant les paramètres. Le CGI traite les couples de paramètres et génère une page HTML La page est transmise au serveur HTTPD Le serveur transmet la page au client Le client affiche la page

IV.2/ Transaction Type (Suite) Mécanismes d’invocation le programme est stocké dans un fichier le nom de ce fichier conditionne le mécanisme d’invocation (CGI ou pré-traitement)

IV.2/ Transaction Type (Suite) Invocation du CGI Deux types de programmes CGI exécutable (ex: extension .exe sous W9x) : le programme est lancé interprété (ex : extension .cgi) : les premières lignes du programme spécifie l'interprète à utiliser

IV.2/ Transaction Type (Suite) Invocation du pré-processeur les extensions .PHP, .PHP4, .PHP3 sont des fichiers HTML contenant des instructions PHP le serveur transmet la page au pré-processeur PHP. le pré-processeur exécute les instructions PHP.

IV.2/ Transaction Type (Suite) Transmission des paramètres : deux méthodes méthode GET méthode POST la méthode est mentionnée dans la balise de description du formulaire (dans la page HTML)

IV.2/ Transaction Type (Suite) Méthode GET les paramètres sont transférés dans l ’URL du CGI (paramètres visibles) ex : monCGI.cgi?nom=Martin&prenom=Jean Méthode POST les paramètres sont transférés dans le corps de la requête (comme dans un fichier) : les paramètres ne sont pas visibles ex : monCGI.cgi … nom=Martin&prenom=Jean

IV. 3/ Exemple Perl (sans paramètre) http://igsi. univ-tlse1 #!/usr/bin/perl ->Identification de l’interpréte use CGI; $moncgi = new CGI(); #description de l'entete print $moncgi->header(-type=>'text/html'); print $moncgi->start_html(); print $moncgi->p("Bonjour"); print $moncgi->end_html(); exit;

IV. 3/ Exemple PHP (sans paramètre) http://igsi. univ-tlse1 <html> <body> <?php echo("hello!"); ?> </body> </html> Balises des instructions PHP à l ’intention du pré-processeur

IV. 3/ Exemple Perl (avec paramètres) http://igsi. univ-tlse1 <html> <head> <title> Addition effectue par un CGI en PERL </title> </head> <body> <form name="formAddition" action="calculAddition.cgi" method="get"> premier nombre : <input type="text" name="nombre1"> second nombre : <input type="text" name="nombre2"> <input type="submit" value = "Additionner"> </form> </body> </html> CGI exécuté à la soumission

IV.3/ Exemple Perl (avec paramètres) http://igsi/~thevenin/calculAddition.cgi?nombre1=10&nombre2=20 #!/usr/bin/perl # use CGI; $moncgi = new CGI(); $a = $moncgi->param("nombre1"); $b = $moncgi->param("nombre2"); $total = $a + $b; #description de l'entete print $moncgi->header(-type=>'text/html'); print $moncgi->start_html(); print $moncgi->p("Résultat : $total"); print $moncgi->end_html(); exit;

IV. 3/ Exemple PHP (avec paramètres) http://igsi. univ-tlse1 <html> <head> <title> Addition effectue par PHP </title> </head> <body> <form name="formAddition" action="calculAddition.php" method="get"> premier nombre : <input type="text" name="nombre1"> second nombre : <input type="text" name="nombre2"> <input type="submit" value = "Additionner"> </form> </body> </html> Page PHP à pré-traiter à la soumission

IV.3/ Exemple PHP (avec paramètres) http://igsi/~thevenin/calculAddition.php?nombre1=10&nombre2=20 <html> <body> Résultat : <? $total = $nombre1 + $nombre2; echo($total); ?> </body> </html>

4/ CGI/PHP : Principales différences impossible d’utiliser un éditeur pour décrire la page générée. Les lignes HTML sont générées par des instructions « print » ou des instructions spécifiques aux balises print $moncgi->start_html(); print $moncgi->p("Résultat : $total"); ==> <HTML> <P> Résultat : ??? </P>

4/ CGI/PHP : Principales différences Possibilité d’utiliser un éditeur pour décrire la page générée (Dreamweaver). Les lignes HTML statiques sont écrites directement dans le fichier PHP avec les balises HTML coût : moindre lisibilité de la partie algorithmique bénéfice : aspect WYSIWYG; possibilité de traiter la requête et sa réponse en une seule page.

IV.3/ Exemple PHP (avec paramètres) http://igsi/~thevenin/additionToutEnUn.php <html> <head> <title> Addition effectue par PHP </title> </head> <body> <form name="formAddition" action="calculAdditionToutEnUn.php" method="get"> premier nombre : <input type="text" name="nombre1"> second nombre : <input type="text" name="nombre2"> <input type="submit" value = "Additionner"> </form> <? if($nombre1 != 0 && $nombre2 != 0) { ?> Résultat : $total = $nombre1 + $nombre2; echo($total); } </body> </html>

V/ Le langage PHP 1/ Présentation 2/ Structure d’un fichier 4/ Exemples

V.1/ Présentation du langage Langage récent : 1994 Première version « mature » : PHP3 Version actuelle : PHP4 Utilisé par plusieurs millions de sites. Couplage avec Apache (possible aussi avec d’autres serveurs).

V.1/ Présentation du langage (suite) Dans la page affichée dans le client, on ne voit pas le PHP V.1/ Présentation du langage (suite) Interprète PHP : module de Apache instructions enchâssées dans le fichier HTML instructions à pré-traiter sont identifiées par des balises Traitement sur le serveur (contrairement à JavaScript)

V.1/ Présentation du langage (suite) Intégration avec de nombreux SGBD (MySQL, Oracle,…) Pour plus d’informations : http://www.php.net/ Configuration utilisée : Serveur Apache sous Linux (RedHat) avec PHP4

V.2/ Structure d’un fichier Extension du fichier : .php ou .php3 ou .php4 Extension du fichier source (non pré-processé): .phps Les Balises pour encadrer les instructions PHP: <? … ?> <script language="php"> … </script> <?php … ?>

V.3/ Le langage manuel : http://www.php.net/manual/fr/manual.php Séparateur d ’instructions : ; commentaires : // commentaire sur une seule ligne # commentaire sur une seule ligne /* commentaire sur plusieurs lignes */

Le langage - les variables simples Pas de déclaration et pas de typage explicite les noms des variables sont toujours préfixés par un $. Exemples : $age = 10; # age est un entier $nom = "titi"; # nom est une chaîne $pi = 3.14; # pi est un nombre réel

Le langage - les variables tableaux Les tableaux ne sont pas déclarés et non typés. les noms des variables tableaux sont toujours préfixés par un $. Le premier élément est en 0. Exemples : $daltons[0] = "Joe"; $daltons[] = "Jack"; # Averell est le deuxieme element (numero 1) $nb = count($dalton); # nb vaut 2

Le langage - Les opérateurs Opérateur d'affectation $nomVar = expression Opérateurs arithmétiques opérateurs binaires : +, -, *, / et % (modulo) opérateur unaires : ++ et -- $i = 0; $j = $i++; # i et j valent 1 $i--; # i vaut 0

Le langage - Les opérateurs Opérateurs logiques And, Or, Xor et ! (not) Opérateurs de comparaison >, <, >=, <=, == (égalité) et != (différent) Opérateurs sur les chaînes . (concaténation)

Le langage - Structure de contrôle Structure alternative SI condition ALORS … SINON ... FIN SI if (conditionPHP){ … } else {

Le langage - Structure de contrôle Structure itérative TANT QUE condition FAIRE … FIN TANT QUE REPETER ... JUSQUA condition while (conditionPHP){ … } do { ... while(!conditionPHP)

Le langage - Structure de contrôle Structure itérative POUR i allant de 1 à n ... FIN POUR for($i=1; $i<=$n; $i++) { … }

Le langage - Définition de fonctions Fonction nomFonction (nomP1, nomP2, nomP3) : TypeRetour DEBUT ... FIN function nomFonction ($nomP1, $nomP2, $nomP3) { … return $nomVarDuTypeRetour; }

Le langage - Appel de fonctions function addition ($n1, $n2) { $somme = $n1 + $n2; return $somme; } #utilisation de la fonction $i = 8; $monTotal = addition(12,$i);

Le Langage - Fonctions utiles Afficher : écrire dans la page HTML. echo(eltAafficher); echo ($monTotal); print(eltAafficher); print (addition(12,$i));

Le Langage - Fonctions utiles Manipulation de chaînes. trim(chaine) : enlever les blancs au début et à la fin. echo trim(" Joe "); # affiche "Joe" substr(chaine, debut, long) : recopier la sous-chaine de long caractères débutant à debut. echo substr("Averell",3,3); # affiche "rel" strlen(chaine) : longueur de la chaine echo strlen("Averell"); # affiche 7

Le Langage - Fonctions Utiles Manipulation de dates getDate(chaine) : obtenir la date système. date(format) : obtenir la date dans un format précis de son choix. echo(jMY) # affiche "26 JAN 20001"

Le Langage - Fonctions Utiles Il est possible d'utiliser date() et mktime() ensemble pour générer des dates dans futur ou dans passé. <?php $tomorrow = mktime (0,0,0,date("m") ,date("d")+1,date("Y")); $lastmonth = mktime (0,0,0,date("m")-1,date("d"), date("Y")); $nextyear = mktime (0,0,0,date("m"), date("d"), date("Y")+1); ?>

VI Interactions de PHP avec une Base de Données 1/ PHP et les SGBD : rappel 2/ Le SGBD Relationnel MySQL 3/ Se connecter à une Base de Données 4/ Interroger une Base de Données 5/ Mettre à jour une Base de Données

VI.1/ PHP et les SGBD : introduction PHP4 peut interagir avec les SGBD suivants : dBase, Informix, Interbase, Microsoft SQL Server, mSQL, MySQL, Oracle, PosgreSQL and Sybase. PHP4 ne possède pas de fonctions génériques d’interaction avec les SGBD Il est possible de contourner ce défaut en passant par l’interface ODBC PHP4 possède un groupe de fonctions d’interaction par SGBD Toutes les fonction d’un groupe ont le même préfixe rappelant le nom du SGBD Nous étudierons les interactions de PHP4 avec MySQL

VI.2/ Le SGBD Relationnel MySQL MySQL est essentiellement un serveur (cf. serveur d’une instance Oracle) Une seule instance du serveur par machine Plusieurs Bases de Données dans une instance Administration de comptes utilisateurs et droits d’accès sophistiqués Transactions limitées à un ordre SQL (exécutées dans des threads) Mécanisme de reprise exploitant des journaux Exécute du SQL standard avec qque limitations Capable de supporter des BD volumineuses (gère des indexes sous forme d ’arbres B+ et des tables de hachage en mémoire)

VI.2/ Le SGBD MySQL (suite) Limitations de MySQL : Pas de transactions (délimitées par commit/rollback) Pas de requêtes imbriquées Pas de clés étrangères (intégrité référentielle) Pas de vues Pas de procédures stockées Pas de déclencheurs

VI.2/ Le SGBD MySQL (suite) Gestion des droits dans MySQL 4 tables : user(Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv, Grant_priv,References_priv,Index_priv,Alter_priv) db(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv, Drop_priv,Grant_priv,References_priv,Index_priv,Alter_priv) tables_priv(Host,Db,User,Table_name,Grantor,Timestamp,Table_priv, Column_priv) columns_priv(Host,Db,User,Table_name,Column_name,Timestamp, Column_priv) Remarque : 5ème table ‘ host ’ permettant d’attribuer des droits sur 1 DB à partir de plusieurs hotes.

VI.2/ Le SGBD MySQL (suite) Gestion des droits dans MySQL Principe : Donner le minimum de droits aux utilisateurs Créer un utilisateur avec tous les droits à No Donner à cet utilisateur les droits minimum sur la Base de Donnée à laquelle il a accès Donner à cet utilisateur des droits sur les tables de cette base et éventuellement sur des attributs Les nouveaux droits ne prennent effet qu’au démarrage du serveur ou après la cde FLUSH PRIVILEGES

VI.2/ Le SGBD MySQL (suite) Gestion des droits dans MySQL Exemple : shell> mysql -u root mysql mysql> UPDATE user SET Password = PASSWORD('new_password') WHERE user='root'; mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y') mysql> FLUSH PRIVILEGES;

VI.2/ Le SGBD MySQL (suite) Gestion des droits dans MySQL L’utilisation de la Cde FLUSH PRIVILEGES est inutile si l’on passe par les Cdes GRANT et REVOKE GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY 'password'] [, user_name [IDENTIFIED BY 'password'] ...] [WITH GRANT OPTION] REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] FROM user_name [, user_name ...] priv_type : ALL PRIVILEGES FILE RELOAD ALTER INDEX SELECT CREATE INSERT SHUTDOWN DELETE PROCESS UPDATE DROP REFERENCES USAGE

VI.2/ Le SGBD MySQL (suite) Gestion des droits dans MySQL Exemple shell> mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT USAGE ON *.* TO dummy@localhost;

VI.2/ Le SGBD MySQL (suite) MySql ne propose pas d’outils clients : Le client privilégié est le réseau TCP/IP Il existe une interface pour gérer les droits, créer des Bases de données et des tables : phpMyAdmin Exercice : Explorer les droits et les bases de données créées sur le serveur avec : phpMyAdmin et worksheet.php

VI.3/ Se connecter à MySQL Afin de pouvoir utiliser une base de données MySQL, un script PHP doit : Établir une connection avec le serveur MySQL Sélectionner sur ce serveur la Base de Données sur laquelle il souhaite travailler Lorsqu ’il a fini d’utiliser la base, le script PHP peut se déconnecter La connection est systématiquement interrompue à la fin du script PHP

VI.3/ Se connecter à MySQL Fonction de connection à MySQL : int mysql_connect ([string hostname [:port] [:/path/to/socket] [, string username [, string password]]]) Permet d’ouvrir une session sur le serveur MySQL d’une machine hôte. Identifie l’utilisateur et vérifie s ’il a le droit de se connecter Fonction de déconnection : int mysql_close ([int link_identifier])

VI.3/ Se connecter à MySQL Sélectionner une Base de Données MySQL : int mysql_select_db (string database_name [, int link_identifier]) Définit la Base de Données active pour une session Toutes les requêtes consécutives seront adressées à cette Base de Données link_identifier correspond à l’identifiant de la dernière session ouverte. Si cet argument n’est pas spécifié, MySQL emploie la dernière session ouverte.

VI.3/ Se connecter à MySQL Exemple : $session = @mysql_connect('igsi.univ-tlse1.fr', $nomlogin, $nompasswd); if (!$session) { echo ("<p>Echec de connection</p>"); } else { if (mysql_select_db($nombase)) { #session non précisée echo("Connection réussie"); mysql_close($session); } else{ echo ("Cette base n'existe pas");

VI.4/ Interroger MySQL Principe : Mise en œuvre : Envoie d’une requête SQL Récupération du résultat ligne par ligne Mise en œuvre : Fonction pour envoyer une requête Fonctions pour décrire et récupérer une ligne de résultat Afficher les valeurs avec la fonction Echo ou dans les éléments d ’un formulaire

VI.4/ Interroger MySQL Fonction pour envoyer une requête SQL : int mysql_query (string query [, int link_identifier]) Permet d’envoyer une requête SQL (LMD, LDD) sous la forme d’une chaîne de caractères, à la Base de Données active retourne FAUX si le texte de la requête contient une erreur, ou si l ’utilisateur connecté n’a pas les droits suffisants retourne un nombre positif (result) utilisé par les fonctions permettant de manipuler le résultat d’une requête SELECT.

VI.4/ Interroger MySQL Fonctions permettant de traiter le résultat d’une requête SELECT : MySQL Fournit des fonctions permettant de: Connaître le nombre de lignes résultat de la requête Connaître le schéma d ’une ligne du résultat Récupérer les lignes du résultat, une à une Libérer les lignes du résultat

VI.4/ Interroger MySQL Connaître le nombre de lignes résultat de la requête : int mysql_num_rows (int result) Rappel : result est le paramètre retour de la fonction mysql_query

VI.4/ Interroger MySQL Connaître le schéma d’une ligne du résultat : Connaître le nombre de colonnes du résultat de la requête int mysql_num_fields (int result) Connaître une colonne du résultat string mysql_field_name (int result, int field_index) string mysql_field_type (int result, int field_index) string mysql_field_table (int result, int field_index) string mysql_field_flags (int result, int field_index) retourne une chaîne ex: "not_null primary_key unique_key"

VI.4/ Interroger MySQL array mysql_fetch_row (int result) Récupérer les lignes du résultat, une à une : MySQL Fournit 3 fonctions équivalentes permettant de récupérer la ligne courante du résultat : array mysql_fetch_row (int result) retourne le n-uplet dans un tableau indexé par la position des colonnes array mysql_fetch_array (int result [, int result_type]) retourne le n-uplet dans un tableau indexé par les noms des colonnes object mysql_fetch_object (int result [, int result_typ]) retourne le n-uplet dans un objet avec des propriétés correspondant aux colonnes

VI.4/ Interroger MySQL Récupérer les lignes du résultat (suite) : Remarques : A chaque appel à une fonction mysql_fetch_*, MySQL passe à la ligne suivante Ces fonction retournent FALSE lorsqu ’il n ’y a plus de ligne dans le résultat. Il est possible de déplacer le curseur de la ligne courante sur une ligne de son choix avec la fonction : int mysql_field_seek (int result, int field_offset) Il existe aussi une fonction permettant de récupérer la valeur d’une colonne de son choix : int mysql_result (int result, int row [, mixed field])

VI.4/ Interroger MySQL Libérer les lignes du résultat : int mysql_free_result (int result) Libère la mémoire occupée par les lignes du résultat (Relâche les verrous posés en lecture)

VI.4/ Interroger MySQL Exemple : $query = "select ne,nom from emp"; $result = mysql_query ($query); #session non précisée if ($result) { echo("<h1>select ne,nom from emp</h1>"); echo("<table border=1>"); echo("<tr><td>ne</td><td>nom</td></tr>"); while ($ligne=mysql_fetch_array ($result)) { echo("<tr>"); echo ("<td>".$ligne["ne"]."</td>"); echo ("<td>".$ligne['nom']."</td>"); echo("</tr>"); } echo("</table>"); mysql_free_result($result);

VI.5/ Mettre à jour une base MySQL Principe : Envoie d’une requête SQL Récupération de l’acquittement fourni par MySQL Mise en œuvre : Fonction pour envoyer une requête Fonctions pour récupérer l’acquittement Afficher le résultat avec la fonction Echo ou dans les éléments d’un formulaire

VI.5/ Mettre à jour une base MySQL Fonction pour envoyer une requête SQL : int mysql_query (string query [, int link_identifier]) Permet d’envoyer une requête SQL (LMD, LDD) sous la forme d’une chaîne de caractères, à la Base de Données active retourne FAUX si le texte de la requête contient une erreur, ou si l ’utilisateur connecté n’a pas les droits suffisants retourne un nombre positif inutile pour les requêtes de mise à jour

VI.5/ Mettre à jour une base MySQL Requêtes SQL de mise à jour : DELETE, INSERT, REPLACE et UPDATE Afficher le nombre de n-uplets mis à jour : int mysql_affected_rows ([int link_identifier]) Afficher le message d’ereur : string mysql_error ([int link_identifier])

VI.4/ Interroger MySQL Exemple : $query = "update emp set nom='tatata' where ne=1"; $result = mysql_query ($query); #session non précisée if ($result) { $nbLignesMAJ=mysql_affected_rows (); echo("<h1>$nbLignesMAJ lignes mises à jour</h1>"); } else { echo (mysql_error()); echo("pas bon la requête");