PHP, TEMPLATE ET HTTP

Documents pareils
L3 informatique TP n o 2 : Les applications réseau

(structure des entêtes)

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

«Cachez-moi cette page!»

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Hébergement de site web Damien Nouvel

Développement des Systèmes d Information

Programmation Web. Madalina Croitoru IUT Montpellier

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Pratique et administration des systèmes

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Internet. Web Sécurité Optimisation

Application Web et J2EE

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

SYSTÈMES D INFORMATIONS

10. Base de données et Web. OlivierCuré

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Compte Rendu d intégration d application

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

Devenez un véritable développeur web en 3 mois!

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

HMTL. Exemple de fichier HTML. Structure d un document HTML. Exemple de fichier HTML. Balises HTML. IFT1147 Programmation Serveur Web avec PHP

les techniques d'extraction, les formulaires et intégration dans un site WEB

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

API SMS CONSEIL HTTP V2.01. Sommaire. Documentation V1.0 au 21/05/2011

Web Tier : déploiement de servlets

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Quelques éléments de compilation en C et makefiles

Comment créer son propre monitoring. (Version simple PHP)

PDO : PHP Data Object 1/13

Drupal Développeur. Theming et développement pour Drupal. Une formation Formateur : Fabien Crépin. Drupal Développeur.

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Gestion centralisée d un réseau de sites discrets. Nicolas JEAN

Open Source Job Scheduler. Installation(s)

PHP 4 PARTIE : BASE DE DONNEES

Module BD et sites WEB

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Module http MMS AllMySMS.com Manuel d intégration

Protection des protocoles

Dans l'article précédent, vous avez appris

A. Architecture du serveur Tomcat 6

Le serveur HTTPd WASD. Jean-François Piéronne

1 Introduction Propos du document Introduction De HTTP 1.0 à HTTP

< Atelier 1 /> Démarrer une application web

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Mac OS X Server Administration des technologies Web. Pour la version 10.3 ou ultérieure

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

RÉALISATION D UN SITE DE RENCONTRE

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

4. SERVICES WEB REST 46

25 mars. Tutoriel sur Laravel. Préparé par : Lydiane Beaulne-Bélisle. Ceci est un tutorial qui montre comment débuter avec le Framework PHP Laravel.

Mysql avec EasyPhp. 1 er mars 2006

Les grandes facettes du développement Web Nicolas Thouvenin - Stéphane Gully

PHP et les Bases de données - Généralités

L installation a quelque peu changée depuis les derniers tutos, voici une actualisation.

Serveur d Applications Web : WebObjects

TP JAVASCRIPT OMI4 TP5 SRC

Hébergement de sites Web

Portabilité sur système Android d un système de borne d information

21 mars Simulations et Méthodes de Monte Carlo. DADI Charles-Abner. Objectifs et intérêt de ce T.E.R. Générer l'aléatoire.

Sécuriser les applications web de l entreprise

WebSpy Analyzer Giga 2.1 Guide de démarrage

Joomla! Création et administration d'un site web - Version numérique

Rapport de projet Site web pour une association

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Mise en œuvre des serveurs d application

Les serveurs WEBUne introduction

Création d un «Web Worm»

Sage CRM. Sage CRM 7.3 Guide du portable

Comment mettre en ligne un site WordPress local

Serveurs de noms Protocoles HTTP et FTP

Description des pratiques à adopter pour la mise à jour du layout en utilisant le gestionnaire de conception de Sharepoint 2013

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Note de synthèse. Développement web sur le CMS Prestashop. Stage du 17 mai au 25 juin Entreprise decoratzia.com 15 rue Erlanger Paris

Réseaux. 1 Généralités. E. Jeandel

FileMaker 13. Guide ODBC et JDBC

Protocoles Applicatifs

Etude et développement d un moteur de recherche

Mysql. Les requêtes préparées Prepared statements

Single Sign-On open source avec CAS (Central Authentication Service) Vincent Mathieu Pascal Aubry Julien Marchal

Jean-Pierre VINCENT Consultant indépendant

Formation : WEbMaster

Gestion d identités PSL Exploitation IdP Authentic

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

UE5A Administration Réseaux LP SIRI

Formation en Logiciels Libres. Fiche d inscription

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Imprimantes et partage réseau sous Samba avec authentification Active Directory

Architectures Web Services RESTful

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Transcription:

PHP, TEMPLATE ET HTTP Développer des application Web

Notion de template 1 Un template est modèle de document, c est-à-dire un document dont la forme est définie, mais dont une partie du contenu est variable. Pour réaliser les parties variables, on insère dans le texte du document des instructions qui permettront au moteur de template de produire le texte variable. On utilise généralement des balises telles que <% et %>, pour séparer les instructions que le moteur de template doit interpréter, du texte qu il doit copier sans changement dans le ou les documents résultants.

Notion de moteur de template 2 Un moteur de templates (template processor) est un programme qui combine un template (modèle) et des données pour produire un ou plusieurs documents. Données... <h1> <?=$titre?> </h1>... Moteur de templates Documents résultants Template (patron) Quelques exemples : ASP.NET, JSP, Apache Velocity

PHP, un langage de template? 3 Le code PHP peut être intégré dans n importe quel fichier de texte grâce aux balises PHP (<?php et?>) À l exécution, les balises PHP sont remplacées par le texte affiché par le code. PHP peut donc être utiliser comme un langage de template et son interpréteur comme un moteur de template.

Exemple de template PHP 4 Fichier guestbook.php <?php // inclut le fichier autoload.php qui contient // les fonctions nécessaires au chargement des // classes utilisée dans le script. require_once('../library/autoload.php'); // appelle la méthode getallmessages définie // dans la classe MessageDAO et qui renvoie // un tableau d objets de type Message. $dao = new \Guestbook\MessageDAO(); $messages = $dao->getallmessages();?> <head> Ce retour à la ligne est <title>livre Copié dans d or</title> la sortie standard Les balises PHP peuvent <h2>livre d or</h2> apparaître n'importe où <div class="message-list> <?php foreach ($messages as $message):?> <div class="message-item" <?php endforeach;?> Cette portion de code ne produit pas de texte id="<?php echo $message->getid();?>"> <?php echo $message->getpseudo();?></br> <?php echo $message->getmessage();?> Pour chaque message, répète la partie du template qui se trouve entre ces deux lignes (ces lignes ne produise pas de texte) <head> <title>livre d'or</title> <h2>livre d'or</h2> <div class="message-list"> <div class="message-item" id="1"> Jean<br> Merci pour toutes ces informations! <div class="message-item" id="2"> Pierre<br> Super site, plein d'informations utiles. <div class="message-item" id="3"> Grégoire<br> Bof... Rien de bien intéressant Interpréteur PHP

Exemple de template JSP 5 Fichier guestbook.jsp <%@ page import="database.*" %> <% // appelle la fonction getallmessage définie // dans le class DAO du package database et qui // renvoie un tableau d objets de type Message. Collection<Message> messages = DAO.getAllMessages(); %> <head> Ce retour à la ligne est <title>livre copié dans d or</title> la sortie standard Les balises JSP peuvent <h2>livre d or</h2> apparaître n'importe où <div class="message-list> <% for(messages : message) { %> <div class="message-item" <% } %> Cette portion de code ne produit pas de texte id="<% out.print(message.getid());%>"> <% out.print(message.getpseudo());%></br> <% out.print(message.getmessage());%> Pour chaque message, répète la partie du template qui se trouve entre ces deux lignes (ces lignes ne produise pas de texte) <head> <title>livre d'or</title> <h2>livre d'or</h2> <div class="message-list"> <div class="message-item" id="1"> Jean<br> Merci pour toutes ces informations! <div class="message-item" id="2"> Pierre<br> Super site, plein d'informations utiles. <div class="message-item" id="3"> Grégoire<br> Bof... Rien de bien intéressant Servlet Container

Remarques 6 Le jeu de caractères de PHP est l ASCII mais en dehors des balises et dans les chaînes de caractères, n importe quel caractère (octet) est transmis tel quel. En conséquence : l encodage de la sortie est le même que celui du fichier source. L encodage du fichier source est sans importance tant que le jeu de caractères est compatible avec l ASCII. Tous les caractères (octets) se trouvant en dehors des balises PHP sont copiés dans la sortie standard, cela inclut les caractères blancs tels que : espaces, tabulations, retours de chariot (CR), fins de ligne (LF) les trois octets du BOM au début d un fichier UTF-8

PHP et HTTP 7 Le but d un script côté serveur est fournir une réponse à une requête HTTP reçue par le server HTTP. Lorsque le serveur HTTP passe un script à l interpréteur PHP, il passe donc également un certain nombre d informations concernant la requête à traiter. Parmi ces informations, les plus utilisées sont : La méthode : $_SERVER[REQUEST_METHOD] Les paramètres de l URL : $_GET Les données d un formulaire : $_POST Les cookies : $_COOKIE

Informations pour une requête GET 8 $_SERVER[REQUEST_METHOD] $_SERVER[REQUEST_URI] $_SERVER[SERVER_PROTOCOL] GET /index.php HTTP/1.1 $_SERVER[HTTP_HOST] Host: localhost Connection: keep-alive Accept: text/html,application/xhtml+xml,[ ] User-Agent: Mozilla/5.0 (X11; Linux x86_64)[ ] Accept-Encoding: gzip,deflate,sdch Accept-Language: fr-fr,fr;q=0.8,en-us;q=0.6,en;q=0.4 getallheaders()

Informations pour une requête POST 9 $_SERVER[REQUEST_METHOD] $_SERVER[REQUEST_URI] $_SERVER[SERVER_PROTOCOL] POST /editors/customers/71 HTTP/1.1 Host: localhost Connection: keep-alive $_SERVER[HTTP_HOST] Content-Length: 117 Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,[ ] Origin: http://localhost User-Agent: Mozilla/5.0 (X11; Linux x86_64)[ ] Content-Type: application/x-www-form-urlencoded Referer: http://localhost/~dev/editors/customers/71 Accept-Encoding: gzip,deflate Accept-Language: fr-fr,fr;q=0.8,en-us;q=0.6,en;q=0.4 firstname=th%c3%a9odore&name=aeby&address=rue+d[ ] getallheaders() $_POST

PHP et réponse HTTP 10 Le but d un script PHP est de produire une réponse HTTP, le document (HTML ou autre) n en est que le contenu. L interpréteur PHP ajoute les en-têtes indispensables à la réponse, mais c est la responsabilité du script de spécifier son statut ainsi que certains en-têtes, tels que : Cache-Control Last-Modified, Expires, ETag Pour spécifier des en-têtes, on utilise la fonction header. Cette fonction doit être appelée avant d écrire le premier caractère dans la sortie standard.

Template de réponse HTTP 11 Fichier guestbook.php <?php http_response_code(200); header("content-type: text/html"); header("cache-control: no-cache"); // inclut le fichier autoload.php qui contient // les fonctions nécessaires au chargement des // classes utilisée dans le script. require_once('../library/autoload.php'); // appelle la méthode getallmessages définie // dans la classe MessageDAO et qui renvoie // un tableau d objets de type Message. $dao = new \Guestbook\MessageDAO(); $messages = $dao->getallmessages();?> <head> <title>livre d or</title> <h2>livre d or</h2> <div class="message-list"> <?php foreach ($messages as $message):?> <div class="message-item" id="<?php echo $message->getid();?>"> <?php echo $message->getpseudo();?></br> <?php echo $message->getmessage();?> <?php endforeach;?> Status: 200 OK Content-Type: text/html Cache-Control: no-cache <head> <title>livre d'or</title> <h2>livre d'or</h2> <div class="message-list"> <div class="message-item" id="1"> Jean<br> Merci pour toutes ces informations! <div class="message-item" id="2"> Pierre<br> Super site, plein d'informations utiles. Interpréteur PHP

Séparer PHP et HTML 12 Dans les exemples précédent, le code PHP et le code HTML sont mélangé dans le même fichier. Bien que cela soit du code valide, ce n est pas une bonne pratique pour au moins trois raisons : Les code HTML sont souvent réalisés par des spécialistes du design (souvent non-programmeurs). D une manière générale, on cherche à éviter l utilisation de plusieurs langage dans un même fichier source. Le mécanisme d inclusion (transculsion) permet de facilement séparer le code PHP et le code HTML.

Template HTML en PHP 13 Un template HTML devrait avoir une extension.phtml et ne devrait contenir que du code HTML et le sous-ensemble de PHP suivant : Affichage d une expression n <?=expression?> <?=$variable?> ou <?=$objet->getmembre()?> Structures de contrôle avec la syntaxe alternative n <?php foreach ($list as $element):?> <?php endforeach;?> n <?php while ($expression):?> <?php endwhile;?> n <?php if ($expression):?> <?php endif;?> On utilise l instruction include pour inclure le template et exécuter les instructions PHP qu il contient. Ces règles sont conventionnelles, PHP ne vérifie pas leur application. Une autre option est d utiliser un moteur de template comme Smarty, Twig ou Haml au lieu de PHP.

Exemple de template HTML 14 Fichier guestbook.phtml (template HTML) <head> <title>livre d or</title> <h2>livre d or</h2> <div class="message-list"> <?php foreach ($messages as $message):?> <div class="message-item" id="<?= $message->getid();?>"> <?= $message->getpseudo();?></br> <?= $message->getmessage();?> <?php endforeach;?> Fichier guestbook.php (code uniquement) <?php // On peut utiliser l'inclusion de fichier, // pour séparer le code PHP du template HTML http_response_code(200); header("content-type: text/html"); header("cache-control: no-cache"); require_once('../library/autoload.php'); $dao = new \Guestbook\MessageDAO(); // définition de la variable $messages // utilisée dans le template $messages = $dao->getallmessages(); // inclut le fichier de tempate include('guestbook.phtml'); Status: 200 OK Content-Type: text/html Cache-Control: no-cache <head> <title>livre d'or</title> <h2>livre d'or</h2> <div class="message-list"> <div class="message-item" id="1"> Jean<br> Merci pour toutes ces informations! <div class="message-item" id="2"> Pierre<br> Super site, plein d'informations utiles. Interpréteur PHP