Résumé Théorique M107
Résumé Théorique M107
Résumé Théorique M107
et de la promotion du travail
Direction de la Recherche et Ingénierie de formation
Manuel de cours
1ère Année
Filière :
Développement
Digital
(Tronc commun)
Technicien spécialisé
Direction de la Recherche et L’Ingénierie de Formation
Digital I Infrastructure digitale
Version : 01/12/2021
Concevoir un réseau informatique
7
Remerciements
La DRIF remercie les personnes qui ont contribué à l’élaboration du présent document :
Équipe de conception :
BOUDIAF Saida Digital learning manager/
Project manager
MIHOUBI Fattoum, Cheffe de projet pédagogique/
Ingénieure pédagogique
CROUZOULON Jonathan, Directeur pédagogique/
Chef de projet pédagogique
Équipe de rédaction :
TIKITO Iman, Docteure en informatique/Reponsable équipes gestion de projet
Les utilisateurs de ce document sont invités à communiquer à la DRIF et au CDC Digital & IA toutes les remarques
et suggestions afin de les prendre en considération pour l’enrichissement et l’amélioration de ce module.
1 2 3 4 5
LE GUIDE DE LA VERSION PDF DES CONTENUS DU CONTENU DES RESSOURCES
SOUTIEN Une version PDF TÉLÉCHARGEABLES INTERACTIF EN LIGNES
Il contient le est mise en ligne Les fiches de Vous disposez de Les ressources sont
résumé théorique sur l’espace résumés ou des contenus consultables en
et le manuel des apprenant et exercices sont interactifs sous synchrone et en
travaux pratiques formateur de la téléchargeables forme d’exercices asynchrone pour
plateforme sur WebForce Life et de cours à s’adapter au
WebForce Life utiliser sur rythme de
WebForce Life l’apprentissage
12 heures
CHAPITRE 1
Approfondir la notion Client/Serveur
• Principe Client/serveur
• Architectures 2-tiers
• Types de serveurs web
04 heures
CHAPITRE 1
Approfondir la notion Client/Serveur
1. Principe Client/serveur
2. Architectures 2-tiers
3. Types de serveurs web
01 - Approfondir la notion client/serveur
Principe Client/serveur
Introduction
À partir du moment où les architectures matérielles peuvent être interconnectées, nous pourrons réaliser une architecture client/serveur.
L’architecture client-serveur s’appuie sur un poste central, le serveur, qui envoie des données aux machines clientes. Les programmes qui accèdent au serveur sont
appelés programmes clients (client FTP, client mail, navigateur).
Cette architecture est basée sur l'utilisation de deux types de logiciels : un logiciel serveur et un logiciel client s'exécutant normalement sur 2 machines différentes.
L'élément important dans cette architecture est l'utilisation de mécanismes de communication entre deux applications.
Le logiciel client-serveur est indépendant des plateformes matérielles et logicielles dite hétérogénéité.
Le logiciel client-serveur masque aux clients la localisation du serveur.
Les services internet sont conçus selon cette architecture.
Chaque application est composée de logiciel serveur et logiciel client.
Présentation de https://perso.univ-lyon1.fr/olivier.gluck :
PARTIE 1
Fig. : Un client, un serveur Fig. : Plusieurs clients, un serveur Fig. : Un client, plusieurs serveurs
Copyright - Tout droit réservé - OFPPT 7
01 - Approfondir la notion client/serveur
Principe Client/serveur
Une requête est un appel de fonction, la réponse éventuelle pouvant être synchrone ou asynchrone
(le client peut émettre d’autres requêtes sans attendre)
• Un serveur parallèle : fonctionne en mode concurrent, désigne une implémentation capable Fig : Internet connexion client serveur. Source: https://www.ipgp.fr/
de gérer plusieurs tâches en apparence simultanées.
• Service avec état : le serveur conserve localement un état pour chacun des clients connectés :
informations sur le client, les requêtes précédentes, …
• Service sans état : le serveur ne conserve aucune information sur l'enchaînement des
requêtes…
Copyright - Tout droit réservé - OFPPT 9
01 - Approfondir la notion client/serveur
Principe Client/serveur
Fig : Représentation Middleware selon Gartner Group Les services d’un Middleware
• Conversion
• Adressage
• Sécurité
• Communication
Avantages et Inconvénients
AVANTAGES INCONVÉNIENTS
Fonctionnement
Fonctionnement d’un réseau client /serveur :
• Le client, pour recevoir des informations du serveur, lui émet une requête passant par un port du PC (exemple : port 25 pour les mails, port 80 pour le web et
port 21 pour le FTP)
• Le serveur envoie ensuite les informations grâce à l’adresse IP de la machine cliente
• Le client traite et affiche les informations en provenance du serveur
La communication peut être établie de deux manières entre deux appareils ou plus, qui sont orientés connexion (mode connecté) et sans connexion (mode non connecté).
Le mode non connecté ne garantit pas :
• l’intégrité des données
• l’ordonnancement des données
• la non-duplication des données
Le mode connecté garantit les propriétés ci-dessus qui ne sont pas garanties par l’application dans le mode non connecté. D’autant plus, le mode connecté :
• Implique une diminution des performances brutes par rapport au mode non-connecté
PARTIE 1
Types d’architectures
Le découpage et la répartition des trois niveaux d’abstraction, d’une application informatique, permettent de distinguer plusieurs types d’architecture à savoir :
Architecture 1-tiers : Architecture Centralisée.
Architecture 2-tiers : Architecture Client/serveur.
Architecture 3-tiers : Architectures Distribuées.
Architecture n-tiers : Architectures Distribuées.
L’architecture 1-tiers : Les trois couches sont intimement liées et s'exécutent sur la même machine. On parle donc de l’informatique centralisée.
L’architecture 2-tiers encore appelée client-serveur de première génération ou client-serveur de données, le poste client se contente de déléguer la gestion des données à
un service spécialisé.
L’architecture 3-tiers est l’extension du modèle client/serveur. Ce type d'architecture est le plus courant des architectures multi-tiers. Il est également appelé client-serveur
de deuxième génération ou client-serveur distribué.
L’architecture n-tiers est une généralisation de l’architecture 3-tiers à partir d’un modèle de composants. Les liens entre les composants sont rendus possibles par
l’existence d’un bus logiciel.
D’après la source http://www-igm.univ-mlv.fr/~dr/XPOSE2001/perrot/Intro-Comparatif.htm on dispose d’un tableau comparatif entre l’architecture 2-tiers et 3 et n-tiers,
PARTIE 1
qui nous permet de recenser les avantages et les limitations de chacun des processus (voir tableau).
2-tiers 3 et n tiers
Complexe Moins complexe
Administration du système (la couche application est physiquement répartie sur (les applications peuvent être gérées centralement
plusieurs postes clients) sur le serveur)
Faible Elevée
Sécurité (sécurité au niveau des données) (raffinée au niveau des services ou des méthodes)
Faible Elevée
Encapsulation des données (les tables de données sont directement accessibles) (le client fait appel a des services ou méthodes)
Faible
Bonne
(plusieurs requêtes SQL sont transmise sur le
Performance réseaux, les données sélectionnées doivent êtres
(seulement les appels de service et les réponse sont
mise sur le réseau)
acheminées vers le client pour analyse)
Excellente
Faible
Extensibilité (gestion limitée des liens réseaux avec le clients)
(possibilité de répartir dynamiquement la charge sur
plusieurs serveurs)
PARTIE 1
Réutilisation Faible (application monolithique sur le client) Excellente (réutilisation des services et des objets)
En progression (des outils intégrés pour développer
Facilité de développement Elevée
la partie du client et du serveur)
2-tiers 3 et n tiers
Lien Serveur-serveur Non Oui (via le middleware Serveur/Serveur)
Oui (via des passerelles encapsulées par les services
Intégration des systèmes déjà en place Non
ou objets)
Excellente
Faible
(les applications de type « thin-client »sont
Soutien Internet (les limitation de la bande passante pénalisent le
facilement téléchargeable et les appels aux services
téléchargement d’application de type « fat-client »)
repartissent la charge sur un ou plusieurs serveurs)
Oui
Sources de données hétérogènes Non (les applications 3-tier peuvent utiliser plusieurs
bases de données dans la même transaction)
Oui
Non
Choix de communication de type « riche » (synchrone et RPC)
(gestion asynchrone de message, files de livraison,
publication et abonnement, « broadcast »
PARTIE 1
1. Principe Client/serveur
2. Architectures 2-tiers
3. Types de serveurs web
01 - Approfondir la notion client/serveur
Architectures 2-tiers
Introduction
• L'architecture 2-tiers (aussi appelée client-serveur de première génération, ou encore client-serveur de données) caractérise les systèmes clients/serveurs pour
lesquels le client à un besoin et le serveur le lui fournit directement, en utilisant ses propres ressources.
• Le serveur traite la demande du client sans recours à des applications tierces.
• Ce type d’architecture permet de bénéficier pleinement de la puissance des ordinateurs déployés en réseau pour fournir à l'utilisateur une interface riche, tout en
garantissant la cohérence des données, qui reste gérée de façon centralisée.
• La gestion des données est prise en charge par un SGBD (Système de gestion de base de données) centralisé, s'exécutant le plus souvent sur un serveur dédié.
• Le langage de requête SQL (Structured Query Language) est la méthode la plus utilisée pour consulter la base de données.
• Le dialogue entre client et serveur se résume donc à l'envoi de requêtes et au retour des données correspondant aux requêtes.
PARTIE 1
Niveau d’abstraction
Une application informatique peut être découpée en trois niveaux d’abstraction distincts :
• Elle décrit les traitements à exécuter par l’application afin de répondre aux requêtes clients.
• Les traitements locaux : tiennent compte les contrôle effectués au niveau du dialogue avec l’IHM (formulaires, champs, boutons,...).
• Les traitements globaux : représentent les règles de l’application appelées aussi logique métier (Business Logique).
• Elle prend en charge les actions liées aux accès aux données.
• Regroupe l’ensemble des mécanismes permettant la gestion des informations stockées par l’application.
• Garantie souvent les fonctions classiques d’un SGBD (Définition de données, Manipulation de données, Sécurité de données, gestion
des transactions, …).
• Gartner Group a proposé un découpage en six vues distinctes montrant les différentes possibilités de répartition entre clients et serveur des trois couches logicielles.
Données Données
Présentation
Serveur
Traitements Traitements Traitements Traitements
PARTIE 1
1. Principe Client/serveur
2. Architectures 2-tiers
3. Types de serveurs web
01 - Approfondir la notion client/serveur
Types de serveurs web
Définition
Un serveur web
• Un serveur Web (aussi appelé serveur http), est tout type de serveur qui permet de diffuser des contenus Web sur Internet ou Intranet.
C’est un service logiciel utilisé pour communiquer entre deux appareils sur un réseau.
• Un serveur web sert à rendre accessible des pages web sur internet via le protocole HTTP.
• Un serveur web répond par défaut sur le port 80.
• Pour qu’un site Web soit accessible à tout moment, le serveur Web sur lequel il est hébergé doit être connecté à Internet en permanence
• Un serveur Web en architecture 3 tiers est composé d'un système d'exploitation, un serveur HTTP, un langage serveur et un système de
gestion de base de données (SGBD), cela constituant une plate-forme.
PARTIE 1
Définition
• (aussi appelé une pile) est composé d'un ordinateur (matériel) et d'un serveur HTTP (logiciel).
• Il est appelé « statique » car le serveur envoie les fichiers hébergés « tels quels » vers le navigateur.
• Possède d'autres composants logiciels, certains qu'on retrouve fréquemment dont un serveur d'applications et une base de données.
• Il est appelé « dynamique » car le serveur d'applications met à jour les fichiers hébergés avant de les envoyer au navigateur via HTTP.
PARTIE 1
Firefox • Gère les derniers standards vidéo AV1 Vivaldi • Fonctionnalités intuitives et originales
Références et ressources
Architecture serveur/Client :
• Daniel MARTIN. Architecture des applications réparties. http://worldserver2.oleane.com/ , Octobre 1999. /dmartin/Architecture applications reparties.htm
• http://mariepascal.delamare.free.fr/IMG/pdf/leClientServeur1.pdf
• https://mrproof.blogspot.com/2011/03/larchitecture-client-serveur.html
Architecture 2tiers :
• http://mariepascal.delamare.free.fr/IMG/pdf/leClientServeur1.pdf
Services Web :
• https://pub.phyks.me/sdz/sdz/les-services-web.html
• http://www-inf.it-sudparis.eu/cours/WebServices/Docs/Bob_WS-1.pdf
PARTIE 1
• Définition du PHP
• Généralités sur les fonctionnalités du PHP
02 heures
CHAPITRE 2
Introduire le langage Php
1. Définition du PHP
2. Généralités sur les fonctionnalités du PHP
02 - Introduire le langage PHP
Définition du PHP
Un peu d’histoire
• PHP est l’acronyme de Hypertext Preprocessor
• Mis au point en 1994 par Rasmus Lerdorf pour publier son CV en ligne mais surtout conserver la trace des visiteurs qui venaient sur son site consulter son CV
• Grace au succès de son code sympathique, et suite aux demandes multiples des internautes, Rasmus mis en ligne 1995 une première version de son programme qu’il
nomma Personal Sommaire Page Tools puis Personal Home Page v1.0 (d’où le nom PHP)
• 1995, apparition de la version 2.0 (Intégration des structures des structures plus avancées : conditions, boucles, intégration des formulaires …)
• La version 2.0 permettra ainsi au développeur d’intégrer des instructions de programmation puissantes directement dans du code HTML.
Définition
PHP
• PHP a permis de créer un grand nombre de sites web célèbres tels que Facebook, YouTube, Wikipedia, …
• PHP est un langage interprété orienté Web. Syntaxiquement, c'est un mélange de C, Java et de Perl. Les scripts PHP sont lus et interprétés par le moteur PHP.
• Il a été conçu spécifiquement pour la création dynamique des pages HTML. Ainsi, il s’intègre dans une page HTML.
• PHP est un produit Open Source : chacun a le droit d'utiliser, d'étudier, de modifier, de dupliquer, de donner et de vendre cette application sans contrepartie.
• PHP est distribué sous licence GNU GPL
Le logo
PARTIE 1
Définition
Langage de script
PHP a considérablement évolué, ces dernières années, d'un langage de script non organisé à un langage de programmation backend orienté objet.
Un script est un ensemble d’instructions de programmation qui est interprété à l’exécution.
Les scripts sont généralement intégrés dans d’autres environnements logiciels.
Les langages de script sont différents des langages de programmation :
• Les langages de script sont spécifiques à une plateforme, tandis que les langages de programmation sont multiplateformes car ils ont la capacité de s’exécuter
eux-mêmes.
• Les langages de script sont souvent interprétés, les langages de programmation sont compilés. Il existe certains langages de script qui sont à la fois compilés et
interprétés, comme Python et Groovy.
• Le langage de programmation est compilé grâce à son propre compilateur qui traduit la syntaxe en code machine avant l’exécution.
• Les langages de script sont interprétés ligne par ligne pendant l’exécution par l’interpréteur de la plateforme sur laquelle ils fonctionnent.
• Les compilateurs effectuent un traitement collectif des erreurs avant l’exécution, tandis que les interpréteurs évaluent le code ligne par ligne.
PARTIE 1
Questions
Question 1 : Question 4 :
Quels sont les avantages des réseaux client/serveur? Une application dite "distribuée" est une application logicielle dans lequel les
données informatiques sont :
1. Une sécurité centralisée
1. Centralisées dans un singleton crée dans un programme accessible
2. Un point de défaillance unique
par tous les composants du réseau
3. Des sauvegardes centralisées
2. Réparties dans des Factory répartis sur le réseau
4. Une réduction des coûts d'exploitation
Question 5 :
Question 2 :
L’architecture client/serveur, trouver l’affirmation fausse :
Les quelles des caractéristiques suivantes s'applique à l'adresse IP?
1. Il est possible de supprimer ou rajouter des clients sans perturber le
1. Elle utilise une adresse de 32 bits fonctionnement du réseau et sans modifications majeures
2. Elle dispose de conversion de nom d'hôte améliorée. 2. Il peut gérer des ressources communes à tous les utilisateurs, comme
3. Cette adresse doit être unique sur le réseau. par exemple une base de données centralisée, afin d'éviter les
problèmes de redondance
4. Elle est fournie par le fournisseur.
PARTIE 1
1. Oui 1. Oui
2. Non 2. Non
Copyright - Tout droit réservé - OFPPT 34
02 - Introduire le langage PHP
Quizz
Questions
Question 7 : Question 10 :
La couche d'accès aux données est liée au serveur de base de données (SGBD) ? IP est un protocole
1. Oui 1. fonctionnant en mode connecté.
2. Non 2. fonctionnant en mode non connecté.
Question 8 : Question 11 :
Les coûts de développements d'une architecture 2-tiers sont plus élevés que Pour envoyer un paquet de données d'un objet connecté à un serveur distant,
pour du 3-tiers ? il faut configurer l'objet. C'est-à-dire :
1. Oui 1. lui affecter une adresse IP, un masque réseau, une route vers le
routeur du réseau et indiquer un serveur DNS.
2. Non
2. lui affecter une adresse IP, une route par défaut vers le routeur du
Question 9 :
réseau.
L'architecture deux tiers est une architecture Client/Serveur ?
Question 12 :
1. Oui
Que signifie DNS?
PARTIE 1
2. Non
1. Dynamic Name System
2. Dynamic Nomination System
3. Domain Name System
4. Domain Name Save
Questions
Question 13 : Question 15 :
A quoi sert le DNS ? Qu’est-ce qui caractérise une architecture Client/Serveur ?
1. Permet de traduire une adresse logique en un nom de domaine 1. Un terminal passif
2. Permet de traduire un nom de domaine en une adresse logique 2. Un navigateur
3. Permet de transplanter un système dans un autre système 3. Une gestion locale de l’interface graphique
4. Permet de traduire une adresse IP v4 en IP v6 4. Un poste qui dispose d’un logiciel envoyant des requêtes à un serveur
Question 14 : Question 16 :
Quel est le protocole dédié à la navigation WEB ? Une architecture logicielle est un document qui décrit l'expression du besoin
1. HTTP sous la forme de spécifications textuelles précises ?
1. Oui
2. FTP
2. Non
3. CTP
Question 17 :
4. DNS
PARTIE 1
Une architecture logicielle est un document qui décrit les composants logiciels
et leurs dépendances mutuelles ?
1. Oui
2. Non
Questions
Question 18 :
Le logiciel qui joue le rôle du client dans le modèle client/serveur du Web
s'appelle un :
1. Explorateur de fichier
2. Navigateur
3. Moteur de recherche
Question 19 :
Un logiciel de serveur Web peut être installé sur n'importe quel ordinateur ?
1. Oui
2. Non
Question 20 :
Complétez les blancs.
PARTIE 1
Réponses
Question 1 : Question 4 :
Quels sont les avantages des réseaux client/serveur? Une application dite "distribuée" est une application logicielle dans lequel les
données informatiques sont :
1. Une sécurité centralisée
1. Centralisées dans un singleton crée dans un programme accessible
2. Un point de défaillance unique
par tous les composants du réseau
3. Des sauvegardes centralisées
2. Réparties dans des Factory répartis sur le réseau
4. Une réduction des coûts d'exploitation
Question 5 :
Question 2 :
L’architecture client/serveur, trouver l’affirmation fausse :
Les quelles des caractéristiques suivantes s'applique à l'adresse IP?
1. Il est possible de supprimer ou rajouter des clients sans perturber le
1. Elle utilise une adresse de 32 bits fonctionnement du réseau et sans modifications majeures
2. Elle dispose de conversion de nom d'hôte améliorée. 2. Il peut gérer des ressources communes à tous les utilisateurs, comme
3. Cette adresse doit être unique sur le réseau. par exemple une base de données centralisée, afin d'éviter les
problèmes de redondance
4. Elle est fournie par le fournisseur.
PARTIE 1
1. Oui 1. Oui
2. Non 2. Non
Copyright - Tout droit réservé - OFPPT 38
02 - Introduire le langage PHP
Quizz (Correction)
Réponses
Question 7 : Question 10 :
La couche d'accès aux données est liée au serveur de base de données (SGBD) ? IP est un protocole
1. Oui 1. fonctionnant en mode connecté.
2. Non 2. fonctionnant en mode non connecté.
Question 8 : Question 11 :
Les coûts de développements d'une architecture 2-tiers sont plus élevés que Pour envoyer un paquet de données d'un objet connecté à un serveur distant,
pour du 3-tiers ? il faut configurer l'objet. C'est-à-dire :
1. Oui 1. lui affecter une adresse IP, un masque réseau, une route vers le
routeur du réseau et indiquer un serveur DNS.
2. Non
2. lui affecter une adresse IP, une route par défaut vers le routeur du
Question 9 :
réseau.
L'architecture deux tiers est une architecture Client/Serveur ?
Question 12 :
1. Oui
Que signifie DNS?
PARTIE 1
2. Non
1. Dynamic Name System
2. Dynamic Nomination System
3. Domain Name System
4. Domain Name Save
Réponses
Question 13 : Question 15 :
A quoi sert le DNS ? Qu’est-ce qui caractérise une architecture Client/Serveur ?
1. Permet de traduire une adresse logique en un nom de domaine 1. Un terminal passif
2. Permet de traduire un nom de domaine en une adresse logique 2. Un navigateur
3. Permet de transplanter un système dans un autre système 3. Une gestion locale de l’interface graphique
4. Permet de traduire une adresse IP v4 en IP v6 4. Un poste qui dispose d’un logiciel envoyant des requêtes à un serveur
Question 14 : Question 16 :
Quel est le protocole dédié à la navigation WEB ? Une architecture logicielle est un document qui décrit l'expression du besoin
1. HTTP sous la forme de spécifications textuelles précises ?
1. Oui
2. FTP
2. Non
3. CTP
Question 17 :
4. DNS
PARTIE 1
Une architecture logicielle est un document qui décrit les composants logiciels
et leurs dépendances mutuelles ?
1. Oui
2. Non
Réponses
Question 18 :
Le logiciel qui joue le rôle du client dans le modèle client/serveur du Web
s'appelle un :
1. Explorateur de fichier
2. Navigateur
3. Moteur de recherche
Question 19 :
Un logiciel de serveur Web peut être installé sur n'importe quel ordinateur ?
1. Oui
2. Non
Question 20 :
Complétez les blancs.
PARTIE 1
1. Définition du PHP
2. Généralités sur les fonctionnalités du PHP
02 - Introduire le langage PHP
Généralités sur les fonctionnalités du PHP
propre machine. Écrire des applications clientes graphiques Unix ou Linux) ou aux gestionnaires de tâches
(sous Windows).
• PHP-GTK permet d’écrire de tels programmes.
• Ces scripts peuvent également être utilisés pour
• Vous pouvez également choisir d'écrire des applications très portables dans ce langage. effectuer des opérations sur des fichiers texte.
• PHP-GTK est une extension de PHP qui n'est pas inclus dans la distribution de base.
Définition
• C'est un langage côté serveur : c'est donc la machine qui héberge le site web qui va exécuter le PHP, et non la machine ou le navigateur du visiteur.
• Indépendant de la plate-forme utilisée puisqu’il est exécuté côté serveur et non côté client.
• C'est un langage interprété : les instructions sont traitées directement par le serveur (pas de compilation)
• PHP supporte de nombreux protocoles comme LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (sous Windows) et encore d'autres.
• Vous pouvez ouvrir des sockets réseau, et interagir avec n'importe quel autre protocole.
• PHP supporte le format complexe WDDX, qui permet de communiquer entre tous les langages web.
• En terme d'interconnexion, PHP supporte aussi les objets Java, et les utilise de manière transparente comme objets intégrés.
• PHP standardise toutes les extensions XML sur la solide base de libxml2, et étend le jeu de fonctionnalités en ajoutant le support de SimpleXML, XMLReader et
XMLWriter.
• PHP est devenu le langage le plus utilisé dans le développement Web, en raison de son interaction avec la base de données MySQL et de son intégration facile avec le
code XHTML.
• PHP permet de développer des scripts suivant le modèle procédural et/ou le modèle objet.
PARTIE 1
Syntaxe
• PHP est utilisable sur la majorité des systèmes d'exploitation, comme Linux, de nombreuses variantes Unix (incluant HP-UX, Solaris et OpenBSD), Microsoft Windows,
macOS, RISC OS, …. Il fonctionne sous forme de module, ou comme processeur CGI. Un script ou programme CGI est un programme comme un autre mais dont la sortie
est dédiée à un navigateur, par exemple un programme shell, C ou Perl qui sort du HTML.
• Une page PHP est tout simplement une page HTML. Cela signifie que celle-ci comporte des balises placées au sein d’une structure HTML classique.
• Les balises PHP sont incluses à l’intérieur du code HTML, mais elles sont repérées par les mentions suivantes : <?php et ?>
• L’extension d’un fichier contenant du code php doit être .php (si vous avez une page nommée index.htm par exemple et que vous y insérez du code PHP, il vous faudra
ainsi la renommer en index.php)
• Il y a plusieurs formes de basiles pour interpréter un code PHP, mais une seule de ces formes est recommandée pour des raisons de compatibilité.
<?php … ?> // La forme recommandé
<? … ?>
<script language="php"> … </script>
<% … %>
PARTIE 1
Configuration
• PHP nécessite au moins Windows 2008/Vista. Soit 32-Bit soit 64-bit (AKA X86 or X64. PHP ne fonctionne pas sur Windows RT/WOA/ARM).
• À partir de PHP 7.2.0 Windows 2008 et Vista ne sont plus supporté.
• PHP nécessite le Visual C runtime (CRT). CRT x86 pour la compilation PHP x86 et le CRT x64 pour la compilation PHP x64. L'installeur CRT supporte les options de ligne
de commande /quiet et /norestart, aussi, vous pouvez les utiliser dans vos scripts.
• Le Microsoft Visual C++ Redistributable pour Visual Studio 2019 convient pour toutes les versions de PHP
• Pour vos développements des pages web dynamiques avec PHP, vous aurez besoin :
• Un OS : Windows, Linux
• Un serveur web avec un interpréteur PHP
• Un éditeur de texte pour écrire des scripts
• Éventuellement une base de données
PARTIE 1
Caractéristiques
Exemples d’application :
• Wiki (MediaWiki, WikiNi, DokuWiki...)
• Forum (phpBB, IPB, punBB...)
• Systèmes de gestion de blog (Dotclear, WordPress...)
• Systèmes de gestion de contenu (appelés aussi CMS) (Spip, ExpressionEngine, Drupal, Xoops...)
• Administration de bases de données (phpMyAdmin, phpPgAdmin, Eskuel...)
• Frameworks (Zend Framework, CodeIgniter, CakePHP, Symfony, etc.)
PARTIE 1
Caractéristiques
Dans le cas de PHP comme langage serveur, les combinaisons les plus courantes sont :
Il est également utilisé par de nombreux systèmes de gestion de contenu (CMS) populaires tels que WordPress, Drupal et Joomla.
Références et ressources
PHP :
https://www.php.net/manual/fr/index.php
https://www.techno-science.net/glossaire-definition/PHP.html
Langage de Script :
https://kinsta.com/fr/blog/langages-de-script/
PHP Framework :
https://geekflare.com/fr/php-frameworks/
PARTIE 1
03 heures
CHAPITRE 3
Préparer l’environnement de
développement
Classement
• Pourcentages de sites Web utilisant divers serveurs Web répartis par
classement.
• Un site Web peut utiliser plusieurs serveurs Web.
• Les rapports inter-technologies n'incluent que les technologies avec plus de
1 % d'utilisation pour garantir la signification statistique des résultats.
• Apache est utilisé par 31.4% de tous les sites Web dont nous connaissons le
serveur Web. Il est utilisé par 27.0% de tous les sites Web dont nous
connaissons le serveur Web et qui se classent dans le top 1 000 000.
PARTIE 1
Classement
• Ce schéma montre les pourcentages de sites Web utilisant différents serveurs Web.
• Un site Web peut utiliser plusieurs serveurs Web.
• Apache est utilisé par 31.4% de tous les sites Web dont nous connaissons le serveur Web.
PARTIE 1
Apache Vs NGINX
• La différence entre Apache et NGINX est présente dans le tableau ci-dessous :
• NGINX a été créé pour résoudre le problème des dix mille connexions simultanées. Cependant, dans notre cas on est loin d’atteindre ce chiffre. Apache offre des
avantages par rapport à Nginx, tels que sa configuration simple, ses nombreux modules et son environnement convivial ainsi, nous allons choisir Apache comme serveur
Web.
Apache NGINX
Apache fonctionne sur tous les systèmes de type Unix tels que Linux, BSD, etc. et Nginx fonctionne sur des systèmes modernes de type Unix ; cependant, il a un
prend entièrement en charge Windows. support limité pour Windows.
Nginx suit une approche pilotée par les événements pour répondre aux demandes
Apache utilise une approche multi-thread pour traiter les demandes des clients.
des clients.
Apache ne peut pas gérer simultanément plusieurs requêtes avec un trafic Web Nginx peut gérer simultanément et efficacement plusieurs demandes de clients
important. avec des ressources matérielles limitées.
Apache traite le contenu dynamique au sein du serveur Web lui-même. Nginx ne peut pas traiter le contenu dynamique de manière native.
Apache est conçu pour être un serveur Web. Nginx est à la fois un serveur Web et un serveur proxy.
PARTIE 1
Les modules sont dynamiquement chargés ou déchargés, ce qui le rend plus Étant donné que les modules ne peuvent pas être chargés dynamiquement, ils
flexible. doivent être compilés dans le logiciel de base lui-même.
Un seul thread ne peut traiter qu'une seule connexion. Un seul thread peut gérer plusieurs connexions.
Les performances d'Apache pour le contenu statique sont inférieures à celles de Nginx peut exécuter simultanément des milliers de connexions de contenu statique
Nginx. deux fois plus rapidement qu'Apache et utilise un peu moins de mémoire.
Téléchargement
• En mode local (sur une machine) ou en intranet, on peut utiliser des plateformes telles que Wamp, Lamp ou Easyphp, dans lesquelles Apache est intégré en tant que
serveur web. Ces plateformes ont aussi MySQL (interfacé avec PhpMyAdmin) comme système de gestion de base de données, et PHP, comme langage de
développement.
• Il s'appuie sur les protocoles HTTP ou HTTPS. Il existe sous deux formes binaires: avec et sans le support de (Open) SSL. La deuxième étant déconseillée si l'on compte
mettre en place HTTPS.
• Apache peut être installé sous plusieurs systèmes d'exploitation: Windows, Mac, et la famille Unix (Linux, OpenBSD, Mac OS X, etc.)
• La plate-forme Windows de base pour l'exécution d'Apache 2.4 est Windows 2000 ou supérieur.
• Télécharger Apache La dernière version stable : 2.4.52 (publié le 2021-12-20) depuis le lien officiel : https://httpd.apache.org/download.cgi
PARTIE 1
Introduction
• La configuration du serveur HTTP Apache s'effectue via des fichiers textes.
• La configuration d'Apache est enregistrée dans les fichiers du sous-répertoire conf.
• Le répertoire par défaut des fichiers de configuration est /usr/local/apache2/conf ou /usr/local/httpd2/conf selon les distributions.
• Le nom du fichier de configuration par défaut est en général httpd.conf, mais peut varier en fonction des distributions tierces du serveur.
• En général, sous Windows la configuration par défaut est suffisante.
• La plate-forme choisie permet de gérer l'édition du fichier de configuration.
• Pour la configuration, il est conseillé de se connecter en tant qu'utilisateur et non en tant qu’admin. Il faut accorder les droits de lecture et d'écriture pour la
configuration.
PARTIE 1
Modules
• Un module peut exporter ou importer certains symboles comme des variables, des fonctions ou des classes. Il désigne originellement un fichier de code de
programmation ou un fichier de bibliothèque statique ou dynamique. (source Wikipédia)
• Liste des modules : https://httpd.apache.org/docs/current/mod/
Fonctionnalités de Ce module fournit Chiffrement de haut Serveur mandataire Exécution des scripts Exécution des scripts
base du serveur un moteur de niveau basé sur les / passerelle multi- CGI (Common CGI. D'ailleurs
HTTP Apache réécriture à base de protocoles Secure protocole. Gateway Interface) l'exécution
toujours disponibles. règles permettant de Sockets Layer (SSL) en fonction du type proprement dite des
réécrire les URLs des et Transport Layer de média ou de la pages développées
requêtes à la volée. Security (TLS). méthode de avec des langages de
requête. programmation tels
que PHP est assurée
PARTIE 1
Quelques commandes
• Vous pouvez installer Apache en tant que service Windows NT à partir de la ligne de commandes et depuis le sous-répertoire Apache bin comme suit :
httpd.exe -k install
• Pur supprimer un service Apache, vous devez écrire la commande suivante :
httpd.exe -k uninstall
• Pur supprimer un service Apache particulier , vous devez écrire la commande suivante :
httpd.exe -k uninstall -n « Nom service »
• Le démarrage, le redémarrage et l'arrêt d'un service Apache s'effectuent via le Moniteur de Service Apache, ou en utilisant des commandes telles que NET START
Apache2.4 et NET STOP Apache2.4, ou encore via le gestionnaire de services standard de Windows.
• Pour démarrer un service Apache installé, vous devez écrire la commande suivante :
httpd.exe -k start -n « Nom-Service »
• Pour arrêter un service Apache via les options de lignes de commande, vous devez écrire l’une des commandes suivantes :
httpd.exe -k stop -n « Nom-Service »
PARTIE 1
Environnement global
• ServerRoot chemin de répertoire : Racine du répertoire d'installation du serveur, par défaut /usr/local/apache.
• Listen [adresse IP:]numéro port [protocole] : Les adresses IP et ports sur lesquels le serveur écoute.
• SecureListen [adresse-IP:]num-port nom-certificat [MUTUAL] : Active le chiffrement SSL pour le port spécifié.
• ServerName [protocole://]nom-de-domaine|adresse-ip[:port] : Nom d'hôte et port que le serveur utilise pour s'authentifier lui-même.
• SuexecUserGroup Utilisateur Groupe : L'utilisateur et le groupe sous lesquels les programmes CGI doivent s'exécuter.
• DBDKeep nombre : Nombre maximum de connexions maintenues, par défaut 2.
• DBDMax nombre : Nombre maximum de connexions, par défaut 10.
PARTIE 1
Serveur
• ServerAdmin adresse électronique|URL : L'adresse électronique que le serveur inclut dans les messages d'erreur envoyés au client.
• ServerName [protocole://]nom-de-domaine|adresse-ip[:port] : Nom d'hôte et port que le serveur utilise pour s'authentifier lui-même. On pourrait aussi y mettre son
adresse (par exemple : 192.168.8.17). Le nom du serveur n'est valide que si on a un serveur DNS fonctionnel. Il est souhaitable de mettre l'IP.
• HostnameLookups On|Off|Double : Active la recherche DNS sur les adresses IP des clients : c'est le mode d'enregistrement des clients. Quand il est activé ( On ), le
client est enregistré par son nom. En mode Off qui est par défaut, l'enregistrement est fait sur l'adresse IP.
• DocumentRoot chemin répertoire : Racine principale de l'arborescence des documents visible depuis Internet, c'est le répertoire qui contient les sites Web hébergés
sur le serveur. On peut le changer, où y mettre tous les sites Web que le serveur doit héberger. Par défaut : "/usr/local/apache/ +
• AddLanguage symbole-langue extension [extension] ... : Associe l'extension de nom de fichier donnée à la langue spécifié, pour permettre à l'utilisateur de lire dans
son navigateur les pages Web dans la langue mentionnée.
PARTIE 1
Pré-requis
• httpd peut être compilé sous Windows en utilisant une chaîne de compilation basée sur cmake, ou à partir de fichiers projet Visual Studio.
• Pour compiler Apache, l'environnement doit satisfaire aux conditions suivantes :
• Espace disque : minimum de 200Mo d’espace disque disponible.
• Microsoft Visual C++ 6.0 (Visual Studio 97) ou supérieur : Apache peut être compilé en utilisant l'outil ligne de commande, ou depuis l'espace de travail IDE
Visual Studio
• Le SDK de la plate-forme Windows mis à jour, février 2003 ou plus récent
• L'IDE Visual Studio cherche le chemin de awk.exe que dans la variable PATH, ou dans le chemin des exécutables spécifié par l'option de menu Tools -> Options ->
(Projects ->) Directories.
• Pour simplifier la compilation d’Apache depuis l'espace de travail IDE de Developer Studio, l'espace de travail Visual Studio Apache.dsw est fourni.
PARTIE 1
VS Code
Visual Studio Code est un excellent éditeur pour le développement PHP. Vous
obtenez des fonctionnalités telles que la mise en évidence de la syntaxe et la
correspondance des crochets, IntelliSense (achèvement du code) et des extraits
de code prêts à l'emploi et vous pouvez ajouter plus de fonctionnalités grâce aux
extensions VS Code créées par la communauté.
Téléchargez Visual Studio Code pour Windows à partir du site officiel :
https://code.visualstudio.com/download
Une fois téléchargé, exécutez le programme d'installation (VSCodeUserSetup-
{version}.exe).
Par défaut, VS Code est installé sous
C:\users\{username}\AppData\Local\Programs\Microsoft VS Code.
.NET Framework 4.5.2 ou supérieur est requis pour VS Code.
Pour Windows 7, assurez-vous d'avoir au moins .NET Framework 4.5.2 installé.
Logo Fig. : Exemple affichage code php écrit dans VsCode
PARTIE 1
VS Code
Installer les extensions à partir du site officiel : https://marketplace.visualstudio.com/
PARTIE 1
Références et ressources
Choix du serveur web :
https://w3techs.com/technologies/cross/web_server/ranking
https://w3techs.com/technologies/overview/web_server
https://www.javatpoint.com/difference-between-apache-and-nginx
Apache :
https://httpd.apache.org/docs/current/
https://httpd.apache.org/docs/2.4/platform/windows.html#cust
https://httpd.apache.org/docs/2.4/mod/quickreference.html
Vs Code :
https://code.visualstudio.com/docs/languages/php
PARTIE 1
48 heures
CHAPITRE 1
Maitriser le langage PHP
12 heures
CHAPITRE 1
Maitriser le langage PHP
Balises PHP
• Lorsque PHP traite un fichier, il cherche les balises d'ouverture et de fermeture
(<?php et ?>) qui délimitent le code qu'il doit interpréter. <?php
//Commentaire sur une seule ligne, style C++
• En version 7, PHP accepte deux syntaxes pour les balises :
<?php ... ?> /*
<? ... ?> Ceci est un
commentaire
• Avant la version 7, PHP acceptait deux syntaxes supplémentaires pour les balises :
sur
<script language="php"> ... </script> plusieurs lignes
<% ... %> */
• Tout ce qui est à l'extérieur de la balise PHP est transmis tel quel au navigateur;
seul les instructions PHP sont interprétées par le moteur PHP.
# Ceci est un commentaire style shell sur une seule ligne
?>
PARTIE 2
Commentaires
<?php
?>
<?=
PARTIE 2
?>
<? php
$var; //nom de variable valide
$Var; //nom de variable valide
$4vars; //nom de variable invalide: commencer avec un nombre n’est pas autorisé
$_var; //nom de variable valide
$état; //nom de variable valide
$éta+; //nom de variable invalide: les caractères spéciaux comme + ne sont pas autorisés
PARTIE 2
Variables prédéfinies
Les variables "superglobales" sont disponibles quel que soit le contexte du script.
$GLOBALS
Référence toutes les variables disponibles dans
un contexte global
<?php
function test() { <?php
$var = "variable locale"; function test()
{
echo ‘$var dans le contexte global : ' . $GLOBALS[« var"] . //la variable $i est intialisée unitquemet lors du premier appel à la function
"\n"; static $i = 0;
PARTIE 2
echo ‘$var dans le contexte courant : ' . $var . "\n"; echo $i;
} // à chaque fois la function est appelée, elle affichera une valeur de $i + 1
$i++;
$var = "Exemple de contenu"; }
test(); ?>
?>
Copyright - Tout droit réservé - OFPPT 77
01 - Maitriser le langage PHP
Manipulation des Variables/constantes/Affectation
Variables dynamiques
• Une variable dynamique prend la valeur d'une variable et l'utilise comme nom d'une autre variable, en utilisant le "$$" précédent la variable.
• Les accolades peuvent aussi être utilisées, pour clairement délimiter le nom de la propriété
<? php
$a = ‘Bonjour’ ;
$$a = ‘étudiant’ ;
Echo "$a ${$a}" ; // Bonjour étudiant
Echo "$a $Bonjour" ; // Bonjour étudiant
?>
PARTIE 2
• Les superglobales ne peuvent pas être utilisées comme variables dynamiques dans les fonctions ou les méthodes des classes.
get_defined_vars
Liste toutes les variables définies
Les constantes
• Une constante est un identifiant (un nom) qui représente une valeur simple.
• Les constantes sont sensibles à la casse.
• Par convention, les constantes sont toujours en majuscule.
• Les constantes peuvent être définies en utilisant le mot clé const ou en utilisant la fonction define().
• une constante n'est pas préfixée d'un $
• Pour vérifier qu'une constante est définie, utiliser la fonction defined().
• Si une constante indéfinie est utilisée une Error est renvoyée lancée.
• Contrairement aux constantes définies en utilisant l'instruction define(), les constantes définies en utilisant le mot-clé const doivent être déclarées au plus haut niveau
du contexte, car elles seront définies au moment de la compilation.
<? Php
PARTIE 2
?>
Constantes magiques
• Une constante magique est une constante prédéfinie dans PHP qui se change en fonction du contexte.
Nom Description
__LINE__ La ligne courante dans le fichier.
Le chemin complet et le nom du fichier courant avec les liens symboliques résolus. Si utilisé pour une inclusion, le nom du fichier inclus
__FILE__
est retourné.
Le dossier du fichier. Si utilisé dans une inclusion, le dossier du fichier inclus sera retourné. C'est l'équivalent de dirname(__FILE__). Ce
__DIR__
nom de dossier ne contiendra pas de slash final, sauf si c'est le dossier racine.
__FUNCTION__ Le nom de la fonction, ou {closure} pour les fonctions anonymes.
Le nom de la classe courante. Le nom de la classe contient l'espace de nom dans lequel cette classe a été déclarée. Lorsqu'elle est
__CLASS__
utilisée dans une méthode de trait, __CLASS__ est le nom de la classe dans laquelle le trait est utilisé.
__TRAIT__ Le nom du trait. Le nom du trait inclut l'espace de nom dans lequel il a été déclaré.
PARTIE 2
<? php
$a = 2; //$a est maintenant égal à 2
$b = 3; //$b est maintenant égal à 3
$c = $a + $b; //$c est maintenant égal à 5
$d = $$c; //$d est maintenant égal à 5
$e = "Bonjour ";
$e .= " les étudiants"; // affecte la valeur "Bonjour les étudiants" à la variable e
PARTIE 2
Introduction
• Les variables PHP pourront stocker différents types de valeurs comme des nombres ou des tableaux. Par abus de langage, on parle des "types variables" de PHP.
• PHP supporte 10 types basiques :
float callable
string iterable
$bool_exp5 = (bool)false;
var_dump($bool_exp5); // Affiche : bool(false)
?>
Type entier
• Un entier est un nombre appartenant à l'ensemble ℤ = {..., -2, -1, 0, 1, 2, ...}. <?php
• Les entiers peuvent être spécifiés en notation: // un nombre décimal
$a = 1234;
• Décimale (base 10)
• Hexadécimale (base 16) : Pour utiliser la notation hexadécimale, précédez le // un nombre octal (équivalent à 83 en décimal)
nombre de 0x $a = 0123;
• Octale (base 8) : Pour utiliser cette notation, précédez le nombre d'un 0
(zéro). À partir PHP 8.1.0, la notation octale peut être précédé avec 0o ou // un nombre octal (à partir de PHP 8.1.0)
0O $a = 0o123;
• Binaire (base 2) : Pour utiliser la notation binaire, précédez le nombre de 0b.
// un nombre hexadecimal (équivalent à 26 en décimal)
• L'opérateur de négation peut être utilisé pour désigner un entier négatif. $a = 0x1A;
• À partir de PHP 7.4.0, les entiers littéraux peuvent contenir des underscores (_)
entre les chiffres, pour une meilleure lisibilité des littéraux. Ces underscores sont // un nombre binaire (équivalent à 255 en decimal)
supprimés par le scanner de PHP. Exemple : $a = 1_203_489 // c’est la même chose $a = 0b11111111;
PARTIE 2
que $a = 1203489
• Pour convertir explicitement une valeur en un entier, utiliser soit le mot-clé (int), // un nombre décimal (à partir de PHP 7.4.0)
soit (integer). $a = 1_234_567;
• Depuis un booléen : false correspond à 0, et true correspond à 1.
?>
• Depuis une chaine de caractères : Si une chaîne est numérique ou numérique $d = 1_234.567; // à partir de PHP 7.4.0
de tête alors elle sera transformée en sa valeur flottante correspondante,
sinon elle sera convertie à zéro.
$epsilon = 0.00001;
• Depuis un booléen : false correspond à 0.0, et true correspond à 1.0
• Depuis d’autres types : la conversion est effectuée d’abord en int puis en float $f = 1.23456780;
?>
PARTIE 2
• \e : échappement (ESC or 0x1B (27) en ASCII) // Affiche : Les variables ne seront pas $traitees $ici
• \f : Saut de page (FF ou 0x0C (12) en ASCII) echo 'Les variables ne seront pas $traitees $ici';
• \\ : Antislash // Affiche : Les variables ne seront pas égales à 2
• \$ : Signe dollar echo "Les variables ne seront pas $traitees $ici";
• \" : Guillemet double ?>
Type objet
Pour créer un nouvel objet, le mot clé new est utilisé afin d'instancier une class.
Une class définit le comportement d'un objet. La classe ne contient aucune donnée.
Un objet est une instance d'une classe qui contient des données.
Une méthode est une fonction qui appartient à un objet et a accès à ses membres.
Un constructeur est une méthode spécifique qui est exécutée lorsqu'un objet est créé.
Type callable
• Les fonctions de rappel peuvent être des fonctions simples ou des méthodes objet, y compris des méthodes de classe statique.
• Les fonctions de rappel peuvent être identifiées via le type callable.
• Une méthode d'un objet instancié est passée comme un tableau contenant un objet à l'index 0, et le nom de la méthode à l'index 1.
• Les méthodes de classe statiques peuvent également être transmises sans instancier un objet de cette classe en passant le nom de la classe au lieu de l'objet à l'index 0,
ou en passant ‘NomClass::NomMethode'
PARTIE 2
Type itérable
• Un iterable est un pseudo-type introduit en PHP 7.1. Il accepte n'importe quel tableau ou objet implémentant l'interface Traversable. (Interface permettant de détecter
si une classe peut être parcourue en utilisant foreach).
• Tous les tableaux sont des itérables.
• Un tableau peut être utilisé comme argument d'une fonction qui nécessite un itérable.
Un itérateur doit avoir ces méthodes :
• current() : Renvoie l'élément sur lequel le pointeur est entrain de pointer.
• key() : Renvoie la clé associée à l'élément courant dans la liste.
• next() : Déplace le pointeur vers l'élément suivant dans la liste.
• rewind() : Déplace le pointeur sur le premier élément de la liste.
• valid() : Il doit retourner false si le pointeur interne ne pointe sur rien (par exemple, si next() est appelé à la fin de la liste). Dans tous les autres cas, il retourne
vrai.
PARTIE 2
Type ressource
Une ressource est une variable spéciale, contenant une référence vers une ressource externe.
Exemples :
PARTIE 2
Type NULL
Il y a une seule valeur de Une variable est considérée Transtyper une variable vers
type null, et c'est la comme null si la constante null est OBSOLÈTE à partir de
constante insensible à la null lui est assignée ou n’a PHP 7.2.0, et SUPPRIMÉE à
casse null. pas encore reçu de valeur. partir de PHP 8.0.0
PARTIE 2
Modification de types
Introduction
• L'ordre de flux est l'ordre dans lequel les instructions d'un programme sont exécutées.
• Les instructions qui changent l’ordre d’exécution sont :
• Les itérations.
• Les instructions conditionnelles.
• Les ruptures de séquences.
• Les instructions de contrôle sont utilisées pour contrôler l'exécution d'un programme :
• Instructions de boucle : elles sont utilisées pour exécuter un bloc de code à x reprises.
• Instructions de sélection : elles vous permettent d'exécuter un bloc de code spécifique dans plusieurs blocs de code en fonction de critères de sélection.
• Instructions de saut : Ces instructions sont utilisées pour passer d'un bloc de code à un autre.
PARTIE 2
Syntaxe alternative
Pour les fonctions de contrôle if, while, for, foreach et switch. PHP propose une
autre manière de rassembler des instructions à l'intérieur d'un bloc.
Vous ne pouvez pas utiliser différentes syntaxes dans le même bloc de contrôle.
L’instruction if else
• Si l'expression vaut true, PHP exécutera l'instruction et si elle vaut false, l'instruction sera ignorée. if (expression)
• Les instructions après le else ne sont exécutées que si l'expression du if est false. commandes
else
commandes
L’instruction elseif
• L'expression elseif est exécutée seulement si le if précédent et tout autre elseif précédent sont évalués comme false, et que votre elseif est évalué à true.
• Le « elseif » et « else if » sont traités de la même façon seulement quand des accolades sont utilisées. (Exemple : else if ($a == $b){ echo $a." égal ".$b;} est une
synthèse correcte, tandis que else if ($a == $b) : echo $a." égal ".$b; est une synthèse qui génère une erreur PHP. De la même façon, les deux syntaxes elseif ($a ==
$b){ echo $a." égal ".$b;} et elseif ($a == $b) : echo $a." égal ".$b; sont toutes les deux correctes.
if (expression)
commandes
elseif (expression)
commandes
PARTIE 2
elseif (expression)
commandes
elseif (expression)
commandes
else
commandes
Copyright - Tout droit réservé - OFPPT 101
01 - Maitriser le langage PHP
Contrôles de flux et boucles
L’instruction switch
• L'instruction switch équivaut à une série d'instructions if.
• Un cas spécial est default. Ce cas est utilisé lorsque tous les autres cas ont échoué.
• PHP continue d'exécuter les instructions jusqu'à la fin du bloc d'instructions du switch, ou bien dès qu'il trouve l'instruction break.
• Dans une commande switch, une condition n'est évaluée qu'une fois, et le résultat est comparé à chaque case.
Exemples :
<?php
switch ($i) {
case 0:
echo "i égal 0";
break;
case 1:
echo "i égal 1";
break;
case 2:
echo "i égal 2";
PARTIE 2
break;
default:
echo "i n'est ni égal à 2, ni à 1, ni à 0.";
}
?>
L’instruction match
• De la même manière qu'une instruction switch, l’instruction match a une expression de sujet qui est comparée à plusieurs alternatives.
• Différences entre match et switch :
• match évaluera une valeur un peu comme les expressions ternaires.
• la comparaison match est un contrôle d'identité (===) plutôt qu'un contrôle d'égalité faible (==) comme switch.
• match renvoie une valeur.
<?php
$valeur_retour = match (expression) {
expression_conditionelle_unique => expression_retour,
expression1_conditionnelle, expression2_conditionnelle => expression_retour,
};
?>
PARTIE 2
L’instruction while
• PHP exécute l'instruction tant que l'expression de la boucle while est évaluée comme true. Si l'expression du while est false avant la première itération, l'instruction ne
sera jamais exécutée.
while (expression) :
commandes
endwhile;
L’instruction do-while
• La principale différence par rapport à la boucle while est que la première itération de la boucle do-while est toujours exécutée.
PARTIE 2
do
commandes
while (expression);
$value){
//commandes
}
$_GET
• Elle donne les valeurs des informations indiquées dans l'url. Exemple de formulaire :
• Les informations après le point d'interrogation ? d’une URL sont en réalité des
données que l'on fait transiter d'une page à une autre. <form action="action.php" method="get">
<p>Votre nom : <input type="text" name="nom" /></p>
Exemple :
<p>Votre prénom : <input type="text" name="prenom" /></p>
• Le site s’appel : lesite.com <p><input type="submit" value="OK"></p>
• Ma page PHP de utilisateur : action.php </form>
• Pour accéder à la page de l’utilisateur, l’URL sera :
http://www.lesite.com/action.php
• Quand l’utilisateur clique sur le bouton « OK », l’URL envoyé au serveur sera
• Pour envoyer les informations de l’utilisateur à la page php nous visible par le visiteur dans la barre d’adresse comme ceci:
utiliserons : http://www.lesite.com/action.php?nom=Rasmus&prenom=Lerdorf
http://www.lesite.com/action.php?nom=Rasmus&prenom=Lerdorf
• Le fichier « action.php » peut maintenant employer la variable super globale
• Les paramètres sont séparé par le symbole & $_GET pour récupérer les données du formulaire
PARTIE 2
<?php
echo "Bonjour $_GET["nom"] $_GET[“prenom"] et bienvenue";
?>
$_POST et $_REQUEST
• PHP $_POST est une variable super globale PHP qui est utilisée pour collecter des données de formulaire après avoir soumis un formulaire HTML avec method="post".
• $_POST est également utilisé pour passer des variables.
• Lorsque nous envoyons des variables via un formulaire, la variable est récupérée de cette façon $_POST['Variable’] et non plus $Variable
Exemple de formulaire envoyé :
<?php
echo $_POST[‘nom'];
echo $_REQUEST[‘prenom'];
?>
$_SERVER
$_SERVER est un tableau contenant des informations comme les en-têtes, dossiers et chemins du script.
Liste dans https://www.php.net/manual/fr/reserved.variables.server.php
Exemples :
requête courante, si elle existe courante, si elle existe courante, si elle existe
Variable prédéfinies
• $_FILES - Variable de téléchargement de fichier via HTTP :
• $_FILES['nom_de_la_variable']['name’] : Le nom original du fichier qui provient de la machine du client
• $_FILES['nom_de_la_variable']['type’] : Le type MIME du fichier
• $_FILES['nom_de_la_variable']['size’] : La taille du fichier en bytes (soit 8 bits ou un octet)
• $_FILES['nom_de_la_variable']['tmp_name’] : Le nom temporaire du fichier stocké sur le serveur
• $_FILES['nom_de_la_variable']['error’] : Le code erreur associé à l'upload
• $_SESSION - Variables de session. Liste des fonctions dans https://www.php.net/manual/fr/ref.session.php
• $_ENV - Variables d'environnement
• $_COOKIE - Cookies HTTP
PARTIE 2
header
• header = Envoie un en-tête HTTP brut
• La syntaxe est header(string $header, bool $replace = true, int $response_code = 0): void
• header : l’en-tête. Il y a deux en-têtes spéciaux :
• Le premier commence par la chaîne "HTTP/" (insensible à la casse), qui est utilisée pour signifier le statut HTTP à envoyer
Exemple : header("$_SERVER["SERVER_PROTOCOL"]." 404 Not Found")
• Le deuxième type d'appel spécial est "Location:". Il renvoie un en-tête au client et un statut REDIRECT (302) au navigateur
• replace : paramètre optionnel. Indique si la fonction header() doit remplacer un en-tête précédemment publié ou ajouter un autre en-tête du même type. Par défaut, le
nouvel en-tête écrasera le précédent, mais vous pouvez forcer plusieurs en-têtes pour le même type d'en-tête si vous passez false dans ce paramètre.
• response_code : Force le code réponse HTTP à la valeur spécifiée.
• header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP.
PARTIE 2
08 heures
CHAPITRE 2
Traiter les données en PHP
Constantes pré-définies
Liste : https://www.php.net/manual/fr/array.constants.php
Opérateurs de tableaux
PARTIE 2
Ouvrir un fichier
• fopen = Ouvre un fichier ou une URL
Expression :
fopen(
string $filename,
string $mode,
bool $use_include_path = false,
resource $context = ?
): resource
Attention
Tab : Liste des modes pour la fonction fopen() en utilisant le paramètre mode. Source : https://www.php.net/manual/fr/function.fopen.php
Lire un fichier
fread() file() file_get_contents fstat
Lecture du fichier en mode binaire Lit le fichier et renvoie le résultat Lit tout un fichier dans une chaîne Lit les informations sur un fichier à
dans un tableau partir d'un pointeur de fichier
Ferme un fichier Écrit un fichier en mode binaire Alias de fwrite Écrit des données dans un fichier
08 heures
CHAPITRE 3
Utiliser l’orientée objet en PHP
Objet 1 Objet 2
Données globales
Données Données
Fonctions Fonctions
Fonction 1 Fonction 2
Objet 3
PARTIE 2
Factorisation des
comportements, puisque les
Meilleur organisation du projet. Facilité la maintenance du code. Souplesse à évoluer le logiciel.
fonctions deviennent
interdépendantes.
Syntaxe de base
• Une définition de classe basique commence par le mot-clé class, suivi du nom de la classe.
<?php
Le nom de la classe : class NomClass
• Peut être ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$ {
// Déclaration d’une propriété
• Ne doit pas être un mot réservé en PHP
• Liste des mots réservé en PHP : https://www.php.net/manual/fr/reserved.php // Déclaration des méthodes
La pseudo-variable $this est : }
• Disponible lorsqu'une méthode est appelée depuis un contexte objet.
?>
}
?>
Méthodes magiques
__construct()
Syntaxe : __construct(mixed ...$values = ""): void
Les classes qui possèdent une méthode constructeur appellent cette méthode à chaque création d'une nouvelle instance de l'objet.
Si vous voulez utiliser un constructeur parent, il sera nécessaire de faire appel à parent::__construct() depuis le constructeur enfant.
Un constructeur peut définir un nombre d’arguments, qui peuvent être requis, avoir un type, et peuvent avoir une valeur par défaut.
class Voiture{
public function __construct(){
$this->couleur=“Blanche";
$this->vitesse=0;
}
}
$maVoiture = new Voiture(); // le constructeur est appelé et les
attributs initialisés
__destruct()
PARTIE 2
Surcharge de propriétés
• __set() :
• Est sollicitée lors de l'écriture de données vers des propriétés inaccessibles (protégées ou privées) ou non existante.
• Syntaxe : public __set(string $name, mixed $value): void
• __get() :
• Est appelée pour lire des données depuis des propriétés inaccessibles (protégées ou privées) ou non existante.
• Syntaxe : public __get(string $name): mixed
• __isset() :
• Est sollicitée lorsque isset() ou empty() sont appelées sur des propriétés inaccessibles (protégées ou privées) ou non existante.
• Syntaxe : public __isset(string $name): bool
• __unset() :
• Est invoquée lorsque unset() est appelée sur des propriétés inaccessibles (protégées ou privées) ou non existante.
• Syntaxe : public __unset(string $name): void
PARTIE 2
Surcharge de méthodes
• __call() :
• Est appelée lorsque l'on invoque des méthodes inaccessibles dans un contexte objet.
• Syntaxe: public __call(string $name, array $arguments): mixed
• __callStatic() :
• Est lancée lorsque l'on invoque des méthodes inaccessibles dans un contexte statique.
• Syntaxe : public static __callStatic(string $name, array $arguments): mixed
PARTIE 2
Références et ressources
• Le site officiel : https://www.php.net/manual/fr/
• https://openclassrooms.com/fr/courses
• https://www.phpfacile.com
• https://php.developpez.com/
PARTIE 2
36 heures
Chapitre 1
Écrire des scripts d’accès aux données
12 heures
CHAPITRE 1
Écrire des scripts d’accès aux données
Introduction
• Pour enregistrer les données en PHP vous pouvez utiliser :
• Les variables
• Les fichiers
• Une base de données
• Une base de données (BDD) permet de stocker, organiser et analyser les données.
• Un système de gestion de base de données (SGBD) permet d’accéder aux bases de données.
• Une couche d'abstraction de base de données est une interface de programmation d'applications qui unifie la communication entre une application informatique et des
bases de données.
• L’API : est une solution informatique qui permet à des applications de communiquer avec d’autres applications et de s'échanger mutuellement des services ou des
données sans connaitre les détails de leur mise en œuvre.
• Une DLL : Une Dynamic Link Library est une bibliothèque logicielle dont les fonctions sont chargées en mémoire par un programme, au besoin, lors de son exécution,
par opposition aux bibliothèques logicielles statiques ou partagées dont les fonctions sont chargées en mémoire avant le début de l'exécution du programme. (source
Wikipédia)
PARTIE 3
dBase : Cette extension n’est pas recommandée par PHP et n’est plus intégrée depuis PHP 5.3.0
Firebird/InterBase : Cette extension n’est pas recommandée par PHP et n’est plus intégrée depuis PHP 7.4.0
MongoDB - MongoDB driver : Ces fonctions vous permettent un accès aux IBM DB2 Universal Database, IBM Cloudscape et Apache Derby qui utilisent DB2 Call Level Interface (CLI).
MySQL - Plugins et drivers MySQL : recommandé par PHP qui offre plusieurs drivers et plugins pour accéder et gérer MySQL.
OCI8 - Oracle OCI8 : Ces fonctions vous permettent d'accéder aux bases de données Oracle. Elles supportent les commandes SQL et PL/SQL.
PARTIE 3
PostgreSQL : Recommandé par PHP. La base de données PostgreSQL est un produit Open Source, disponible sans frais.
SQLSRV - Driver Microsoft SQL Server pour PHP : Vous permet d'accéder à un serveur de base de données Microsoft SQL et SQL Azure.
MySQL
Avant de créer une connexion à un serveur de base de données MySQL, vous devez avoir :
• Un serveur de base de données MySQL installé sur votre système local ou sur un serveur distant.
• Une base de données sur le serveur MySQL.
• Un compte MySQL avec un nom d’utilisateur et un mot de passe permettant d’accéder à la base de données.
• Les plateformes de développement Web PHP comme EasyPHP, LAMP, WAMP, MAMP, LEMP et XAMPP fournissent MySQL.
Fonctions MySQL :
• mysql_connect — Ouvre une connexion à un serveur MySQL
• mysql_create_db — Crée une base de données MySQL
• mysql_ping — Vérifie la connexion au serveur MySQL, et s'y reconnecte au besoin
• mysql_query — Envoie une requête à un serveur MySQL
• …
• Liste complète des fonctions MySQL en PHP : https://www.php.net/manual/fr/ref.mysql.php
PARTIE 3
Installation PDO
• Choisissez les autres fichiers DLL spécifiques à votre base de données et utilisez soit la fonction dl() pour les charger au moment de l'exécution ou activez-les dans le
fichier php.ini en-dessous de la ligne php_pdo.dll.
Fonction dl :
• Définition : Charge une extension PHP à la volée
• Syntaxe : dl(string $extension_filename) : bool
Fonctions PDO
PDO::beginTransaction ➔ Démarre une transaction
La classe PDOStatement
• PDOStatement : Représente une requête préparée et, une fois exécutée, le jeu de résultats associé.
Méthodes :
• PDOStatement::bindColumn : Lie une colonne à une variable PHP
• PDOStatement::bindParam : Lie un paramètre à un nom de variable spécifique
• PDOStatement::bindValue : Associe une valeur à un paramètre
• PDOStatement::columnCount : Retourne le nombre de colonnes dans le jeu de résultats
• PDOStatement::debugDumpParams : Détaille une commande préparée SQL
• PDOStatement::errorCode : Récupère les informations sur l'erreur associée lors de la dernière opération sur la requête
• PDOStatement::errorInfo : Récupère les informations sur l'erreur associée lors de la dernière opération sur la requête
• PDOStatement::execute : Exécute une requête préparée
• PDOStatement::fetchAll : Retourne un tableau contenant toutes les lignes du jeu d'enregistrements
• PDOStatement::getAttribute : Récupère un attribut de requête
PARTIE 3
• …
• Liste complète : https://www.php.net/manual/fr/class.pdostatement.php
La classe PDOException
• PDOException : Représente une erreur émise par PDO.
Propriétés :
• errorInfo : Retourne les informations associées à l'erreur lors de la dernière opération sur la base de données. Correspond à PDO::errorInfo() ou
PDOStatement::errorInfo().
• errorcode : Retourne le SQLSTATE associé avec la dernière opération sur la base de données. (SQLSTATE : un identifiant alphanumérique de cinq caractères défini
dans le standard ANSI SQL.)
• PDO::errorInfo
• Syntaxe : public PDO::errorInfo(): array
• Retourne un tableau contenant :
• [0] : Code d'erreur SQLSTATE
• [1] : Code d'erreur spécifique au driver.
PARTIE 3
Configuration
• Le pilote PDO_MYSQL implémente l'interface de PDO pour autoriser l'accès de PHP aux bases de données MySQL. Pour déclarer le pilote du SGBD MySQL, il faut ajouter
la ligne suivante dans le fichier php.ini : extension=php_pdo_mysql.dll
• L’extension PDO peut utiliser soit la bibliothèque mysqlnd, soit la bibliothèque libmysqlclient.
• La bibliothèque interne mysqlnd est la bibliothèque par défaut et qui est recommandé par le PHP.
SQL
• SQL (Structured Query Language) est un langage de programmation standardisé utilisé pour gérer les bases de données au sein des SGBD et plus particulièrement les
SGBD relationnelles (ex: MySQL), permettant d’effectuer des opérations sur les données qu’elles contiennent.
Les instructions SQL couvrent 4 domaines :
• Langage de définition de données (LDD) : permet de créer ou supprimer des objets dans la base de données.
• Langage de manipulation de données (LMD) : permet de manipuler les données contenues dans les tables.
• Langage de contrôle de données (LCD) : permet de gérer les utilisateurs d'une base de données ainsi que leurs droits sur les objets.
• Langage de contrôle des transactions (LCT) : permet de valider ou annuler des modifications de données dans la base de données.
try {
?>
$<?php
$mysqlConnection = new PDO(
'mysql:host=localhost;dbname=testDB;charset=utf8’, 'root’, 'root'
);
?>
<?php
$db = new PDO(
'mysql:host=localhost;dbname=test;charset=utf8',
'root',
'',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION],
);
?>
PARTIE 3
Utiliser MySQL
• Création d’une base de données : CREATE DATABASE test
• Création d’un login et mot de passe : CREATE USER ‘user1’@‘localhost’ IDENTIFIED BY “.monPass1!"
(On crée un utilisateur « user1 » avec le mot de passe « .monPass1! »)
Requêtes SQL
Ajouter une colonne : ALTER TABLE [tablename] ADD COLUMN [colonne3] VARCHAR(100);
Ajouter une colonne avec un ID unique par incrémentation automatique : ALTER TABLE [tablename]
ADD COLUMN [colonne4] int NOT NULL AUTO_INCREMENT PRIMARY KEY;
Insérer un enregistrement dans une table SQL : INSERT INTO [tablename] ([colonne1], [colonne2]) VALUES
PARTIE 3
('[valeur1]', '[valeur2]');
<?php
//identifiants mysql
$host = "localhost";
$username = "root";
$password = "";
$database = “utilisateurs";
$nom = $_POST["nom"];
$email = $_POST["email"];
Requêtes SQL
Envoyez une requête SQL depuis votre script PHP en utilisant : PDO::query()
Sélectionner des enregistrements spécifiques : SELECT * FROM [table] WHERE [colonne] = [valeur];
Sélectionnez les enregistrements qui contiennent la valeur [val] : SELECT * FROM [table] WHERE [colonne] LIKE '%[val]%’;
Sélectionnez les enregistrements commençant par ‘val1’ et se terminant par ‘val2’ : SELECT * FROM [table] WHERE [colonne] LIKE '[val1_val2]’;
PARTIE 3
Sélectionnez des enregistrements sans doublons : SELECT distinct nom, email FROM personne WHERE nom = “Mohammed";
Faire un SELECT sur plusieurs tables : SELECT [table1].[colonne1], [table2].[colonne2] FROM [table1], [table2];
Constantes PDO
PDO::FETCH_ASSOC (int)
• Spécifie que la méthode de récupération doit retourner chaque ligne dans un tableau indexé par les noms des colonnes comme elles sont retournées dans le jeu
de résultats correspondant. Si le jeu de résultats contient de multiples colonnes avec le même nom, PDO::FETCH_ASSOC retourne une seule valeur par nom de
colonne.
PDO::FETCH_NAMED (int)
• Spécifie que la méthode de récupération doit retourner chaque ligne dans un tableau indexé par les noms des colonnes comme elles sont retournées dans le jeu
de résultats correspondant. Si le jeu de résultats contient de multiples colonnes avec le même nom, PDO::FETCH_NAMED retourne un tableau de valeurs par
nom de colonne.
PDO::FETCH_COLUMN (int)
• Spécifie que la méthode de récupération doit retourner uniquement une seule colonne demandée depuis la prochaine ligne du jeu de résultats.
CRUD
• CRUD est un acronyme des noms des quatre opérations de base de la gestion de la persistance des données et applications :
• Create (créer)
• Read ou Retrieve (lire)
• Update (mettre à jour)
• Delete ou Destroy (supprimer)
• Les opérations CRUD sont exécutées différemment en fonction de l’environnement, comme indiqué ci-dessous dans le tableau :
Requêtes SQL
Mettre à jour des enregistrements : UPDATE [table] SET [colonne] = '[new_val]' WHERE [colonne] = '[old_val]’;
Supprimer les colonnes d’une table : ALTER TABLE [table] DROP COLUMN [colonne];
Accorder un accès complet à l’utilisateur sur toutes les tables : GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost';
$dbco->beginTransaction();
$dbco->commit();
eho 'Entrées ajoutées dans la table';
PARTIE 3
12 heures
CHAPITRE 2
Sécuriser les données
Introduction
• Pour transmettre des variables de page en page, on peut utiliser :
• Les divers champs des formulaires.
• Passer les variables directement à travers les liens.
• Utiliser les cookies.
• Utiliser les sessions.
• Quand une session est créée sur le serveur, ce dernier envoie son identifiant (unique) au client sous forme d'un cookie.
PARTIE 3
Cookies
• Les cookies sont un mécanisme d'enregistrement d'informations sur le client, et de lecture de ces informations.
• Les cookies font partie des en-têtes HTTP, ce qui impose que les fonctions doivent être appelées avant tout affichage de texte.
• variables_order string : Définit l'ordre d'analyse des variables EGPCS (Environment, Get, Post, Cookie, et Server). Par exemple, si variables_order est défini à "SP" alors
PHP créera superglobals $_SERVER et $_POST, mais ne créera pas $_ENV, $_GET, et $_COOKIE. Le fait de définir cet ordre à "" signifie qu'aucune superglobals ne sera
définie.
• Tous les cookies envoyés au serveur par le client seront automatiquement inclus dans un tableau auto-global $_COOKIE si variables_order contient "C".
• Si vous souhaitez affecter plusieurs valeurs à un seul cookie, ajoutez [] au nom du cookie.
PARTIE 3
La fonction setcookie()
Une fois que les cookies ont été placés, ils seront accessibles
Il faut appeler cette fonction avant toute balise <html> ou lors du prochain chargement de page dans le tableau
<head> et aussi des caractères d'espacement blanc. $_COOKIE. Les valeurs des cookies peuvent aussi exister dans
la variable $_REQUEST.
La fonction setcookie()
Path : Le chemin sur le serveur sur lequel le cookie sera Domain : Le (sous-)domaine pour lequel le cookie est
disponible. disponible.
Secure : Indique si le cookie doit uniquement être transmis à Httponly : Lorsque ce paramètre vaut true, le cookie ne sera
travers une connexion sécurisée HTTPS depuis le client. accessible que par le protocole HTTP. Cela signifie que le
Lorsque ce paramètre vaut true, le cookie ne sera envoyé que cookie ne sera pas accessible via des langages de scripts,
si la connexion est sécurisée. comme Javascript.
PARTIE 3
La fonction setrawcookie()
Syntaxe : setrawcookie ( string $name, string $value = ?, int $expires_or_options = 0, string $path = ?, string
$domain = ?, bool $secure = false, bool $httponly = false, array $options = [] ) : bool
setrawcookie() est identique à setcookie() excepté que la valeur du cookie ne sera pas automatiquement
encodée URL lors de l'envoi au navigateur.
PARTIE 3
• …
Introduction
• La sécurité d'un serveur web PHP est fragile puisqu’il permet d'accéder aux fichiers, d'exécuter des commandes, et d'ouvrir des connexions réseaux.
• La common gateway interface (CGI) est une interface de serveurs Web qui permet un échange de données normalisé entre des applications et des serveurs externes.
Ainsi, les pages HTML ne sont pas entièrement disponible sur le serveur HTTP qui exécute un autre programme, puis retourne le contenu généré.
• Utiliser PHP comme un exécutable CGI est une possibilité pour les cas où l'on ne veut pas l'utiliser comme un module du serveur web (comme Apache), ou bien lorsque
l'on souhaite l'utiliser en combinaison avec un gestionnaire CGI complémentaire, afin de créer un environnement de script sécurisé.
• Lorsque PHP est utilisé en tant que module Apache, celui-ci hérite des permissions accordées à l'utilisateur faisant tourner Apache ce qui peut impacter la sécurité et
les autorisations.
• Une erreur de sécurité fréquente est de donner à l'utilisateur Apache les droits de superadministrateur ("root"), ou d'accroitre les possibilités d'Apache d'une
quelconque autre façon.
• PHP, est constamment testé et amélioré. Chaque nouvelle version rassemble des modifications majeures ou mineures, aussi bien pour renforcer la sécurité, que pour
réparer des problèmes de conception et de configuration, ainsi que d'autres points qui peuvent affecter la sécurité et la stabilité globale de votre système.
PARTIE 3
• Utiliser une clé de hachage sécurisé à usage unique comme clé d'auto-identification en utilisant la fonction setcookie(). Utiliser un hachage sécurisé plus fort que SHA-2.
i.e. SHA-256 ou supérieur avec des données aléatoires depuis la fonction random_bytes() ou via /dev/urandom.
• Utiliser la fonction output_add_rewrite_var() pour la protection des fraudes de requêtes intersites.
• session.trans_sid_tags=[drapeaux limités] : (PHP 7.1.0 >=) Les développeurs ne doivent pas réécrire de drapeaux HTML non nécessaires. La valeur par défaut doit être
suffisante pour la plupart des utilisations.
utiliser un client SSH pour chiffrer la connexion entre les clients et le serveur de bases de données.
• Dans le cas de données vraiment sensibles, si la représentation originale n'est pas nécessaire (pour affichage, ou comparaison), utiliser un hash est une bonne solution.
déployé, vous devriez soit désactiver complètement le rapport d'erreur en passant 0 à la fonction error_reporting(), soit en désactivant l'affichage des erreurs en
utilisant l'option de configuration display_errors de php.ini. Si vous choisissez la seconde solution, vous devriez également définir le chemin vers votre fichier de log en
utilisant la directive de configuration error_log, et en activant la directive log_errors.
Exemples d’attaques
Injection SQL : La solution à cela est d’utiliser des requêtes SQL paramétrées et des objets de données PHP (PDO) pour différencier les données des parties de requêtes.
Traversée du répertoire : Il faut appliquer les autorisations appropriées en fonction du statut de l’utilisateur.
Scripts intersites (attaques XSS) : Parmi les solutions filtrer toutes les données externes ainsi que d’utiliser les fonctions existantes PHP.
Falsification de demandes intersites : Il est recommandé d’utiliser HTTPS pour crypter la connexion. L’utilisation de POST au lieu de GET ainsi qu’un mécanisme
d’authentification dans les formulaires.
Stockage des mots de passe : Il existe deux façons importantes de stocker des mots de passe en toute sécurité, en utilisant un algorithme de hachage et du sel.
Détournement de session : Vérifier les détails de l’emplacement et les informations du navigateur et les faire correspondre avec les données historiques peut fournir des
informations sur la session en cours.
Fixation de session : L’utilisation des cookies et la régénération d’identifiant de session servent à limiter ces attaques.
PARTIE 3
Attaques XML : De préférence utiliser un ensemble de caractères sur liste blanche pour vous assurer que les caractères indésirables ou spéciaux ne sont pas acceptés.
Références et ressources
https://www.lebigdata.fr/base-de-donnees
https://sql.sh/
https://www.w3schools.com/sql/sql_intro.asp
https://dev.mysql.com/doc/connectors/en/apis-php-pdo-mysql.html
https://www.php.net/manual/fr/features.cookies.php
https://www.php.net/manual/fr/book.session.php
PARTIE 3
https://www.getastra.com/blog/php-security/php-security-guide/
https://www.ionos.fr/digitalguide/sites-internet/developpement-web/quest-ce-que-la-cgi/
24 heures
CHAPITRE 1
Développer des sites dynamiques en MVC
08 heures
CHAPITRE 1
Développer des sites dynamiques en MVC
Introduction
• Dans l'architecture 3-tiers, si une vue modifie les données, toutes les vues concernées par la modification doivent être mises à jour, d'où l'utilité de l'utilisation du MVC
au niveau de la couche de présentation. La couche de présentation permet donc d'établir des règles du type « mettre à jour les vues concernant X si Y ou Z sont
modifiés ». (Wikipédia)
• MVC (Modèle-Vue-Contrôleur) est un modèle de conception, il est donc indépendant du langage de programmation. Il met l'accent sur la séparation entre la logique
métier et l'affichage du logiciel.
Quelques Avantages
Quelques Inconvénients
PARTIE 4
• Complexe pour de petites applications. Le temps accordé à l’architecture peut ne pas être rentable pour le projet.
• Augmentation de la difficulté d’implémentation.
• Le nombre important de fichiers représente une charge non négligeable dans un projet.
• FuelPHP : https://fuelphp.com/
• Aura : https://auraphp.com/
Architecture MVC
PARTIE 4
Contrôleur
Les Modèles
Les Vues
<?php
require(‘modele.php’);
$comments = getComments(); //fonction présente dans modele.php
require(‘view.php’);
?>
PARTIE 4
</p>
</div>
<?php } ?>
</body>
</html>
<?php
function bdConnect()
{
try
{
$bd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
return $bd;
}
catch(Exception $e)
PARTIE 4
{
die('Erreur : '.$e->getMessage());
}
}
?>
Exemple modèle
• Suite à l’exemple précédent, nous pourrons ajouter d’autres fonctions qui récupèrent les commentaires d’un ID ou les 5 dernier commentaires par exemple :
function getCommentsById($Id)
{
$bd = bdConnect();
$comments_id = $bd->prepare(‘
SELECT id, auteur, commentaire, DATE_FORMAT(date_commentaire, \'%d/%m/%Y à %Hh%imin%ss\') AS comment_date_fr
FROM comments
WHERE id = ? ORDER BY date_ commentaire DESC');
$comments_id->execute(array($Id));
return $comments_id;
}
function getLastFiveComments()
{
$bd = bdConnect();
$req = $bd->query(‘
SELECT id, auteur, commentaire, DATE_FORMAT(date_commentaire, \'%d/%m/%Y à %Hh%imin%ss\') AS comment_date_fr
PARTIE 4
FROM comments
ORDER BY date_commentaire DESC
LIMIT 0, 5');
return $req;
}
Questions
Question n°1 : Question n°3 :
Dans MVC, quelle partie s'occupe d'afficher la page en HTML ? Pourquoi le routeur se trouve souvent dans un fichier nommé index.php à la
racine ?
1. Modèle
1. Parce que cela permet d'accélérer les traitements
2. Vue
2. Parce que c'est obligatoire pour faire du routing
3. Contrôleur
3. Parce que c'est une convention
4. Parce que le routeur est le premier élément qu'on appelle
Question n°2 :
Laquelle de ces phrases décrit le mieux les différentes phases d'exécution d'un
code en MVC ? Question 4 :
1. Le routeur appelle le bon contrôleur, qui récupère des informations MVC est un modèle de conception utilisé pour découpler l'interface utilisateur,
depuis le modèle qu'il passe ensuite à la vue les données et ____________.
2. Le contrôleur appelle le modèle, qui passe le tout au routeur pour que 1. Logique d'application
celui-ci puisse afficher la vue
PARTIE 4
2. Application
3. Le routeur appelle le modèle, qui transmet les données au contrôleur
3. Logique
qui passe à la vue
4. Rien
Questions Question 7 :
Question 5 : Pourquoi est-il conseillé de ne pas mélanger PHP, HTML et SQL dans un même
fichier ?
Le ____________ aide à transmettre les données du contrôleur à afficher et à
afficher au contrôleur. 1. Cela permet de travailler à plusieurs sur plusieurs fichiers en parallèle
3. Routeur
Question 8 :
Il est utilisé pour afficher l'ensemble des données à l'aide du modèle : 1. Français
1. Contrôleur 2. Anglais
2. Vue 3. Arabe
Question 9 :
Quand une page ne contient que du code PHP, on ouvre la balise <?php et...
1. On ne la ferme pas à la fin
2. On pense bien à ajouter un ?> à la fin
Copyright - Tout droit réservé - OFPPT 221
Développer des sites dynamiques en MVC
Quizz (Correction)
Réponses
Question n°1 : Question n°3 :
Dans MVC, quelle partie s'occupe d'afficher la page en HTML ? Pourquoi le routeur se trouve souvent dans un fichier nommé index.php à la
racine ?
1. Modèle
1. Parce que cela permet d'accélérer les traitements
2. Vue
2. Parce que c'est obligatoire pour faire du routing
3. Contrôleur
3. Parce que c'est une convention
4. Parce que le routeur est le premier élément qu'on appelle
Question n°2 :
Laquelle de ces phrases décrit le mieux les différentes phases d'exécution d'un
code en MVC ? Question 4 :
1. Le routeur appelle le bon contrôleur, qui récupère des informations MVC est un modèle de conception utilisé pour découpler l'interface utilisateur,
depuis le modèle qu'il passe ensuite à la vue les données et ____________.
2. Le contrôleur appelle le modèle, qui passe le tout au routeur pour que 1. Logique d'application
celui-ci puisse afficher la vue
PARTIE 4
2. Application
3. Le routeur appelle le modèle, qui transmet les données au contrôleur
3. Logique
qui passe à la vue
4. Rien
Réponses Question 7 :
Question 5 : Pourquoi est-il conseillé de ne pas mélanger PHP, HTML et SQL dans un même
fichier ?
Le ____________ aide à transmettre les données du contrôleur à afficher et à
afficher au contrôleur. 1. Cela permet de travailler à plusieurs sur plusieurs fichiers en parallèle
3. Routeur
Question 8 :
Il est utilisé pour afficher l'ensemble des données à l'aide du modèle : 1. Français
1. Contrôleur 2. Anglais
2. Vue 3. Arabe
Question 9 :
Quand une page ne contient que du code PHP, on ouvre la balise <?php et...
1. On ne la ferme pas à la fin
2. On pense bien à ajouter un ?> à la fin
Copyright - Tout droit réservé - OFPPT 223
Développer des sites dynamiques en MVC
Références et ressources
Références et ressources
https://bpesquet.developpez.com/tutoriels/php/evoluer-architecture-mvc/
https://openclassrooms.com/fr/courses/4670706-adoptez-une-architecture-mvc-en-php/4678736-comment-fonctionne-une-architecture-mvc
https://www.univ-orleans.fr/iut-orleans/informatique/intra/tuto/php/php-mvc.html
PARTIE 4
08 heures
CHAPITRE 2
Découvrir les Web services et les API REST
Introduction
Un Web Service est une application qui permet d’échanger des données avec d’autres applications web.
Un Web Service fonctionne de la manière suivante :
• Le client effectue une requête HTTP/SOAP pouvant contenir un corps formatté en XML ou JSON ;
• La requête est transmise à un serveur distant (via les protocoles SOAP ou HTTP) ;
• Une réponse est ensuite délivrée dans un format tel que XML, JSON ou HTML.
Un Web Service utilise un modèle en couche :
• L’invocation : elle décrit la structure des messages échangés par le client et le serveur ;
• La découverte : est la phase de recherche et de localisation des données demandées par le client, le plus souvent via le protocole UDDI (Universal Description
Discovery and Integration). UDDI est un annuaire (une liste, un répertoire) de services fondé sur XML et plus particulièrement destiné aux services Web ;
• La description qui stipule les paramètres des fonctions et les types de données des services web utilisés. Son protocole standard est le WSDL (Web Services
Description Language) qui repose sur la notation XML.
WSDL est une grammaire XML permettant de décrire un service web. Une description WSDL est un document XML qui commence par la balise <definitions> et qui
contient les balises suivantes :
PARTIE 4
Wikipédia : https://fr.wikipedia.org/wiki/Web_Services_Description_Language
Copyright - Tout droit réservé - OFPPT 227
Découvrir les Web services et les API REST
01 - Introduction aux Web services
Inconvénients
• Un service web a toujours besoin d’un réseau (internet, intranet, …) pour fonctionner.
PARTIE 4
Quelques avantages :
• Industrialiser l’échanges d’informations : une API permet de pouvoir interagir avec un système complexe sans connaitre le
détail du programme.
• Sécuriser et contrôler les échanges de données : Une API est souvent spécialisée dans un fonctionnement particulier ce qui
PARTIE 4
Prérequis et Installation
• Prérequis : l'extension PHP libxml. Ceci signifie passer l'option de configuration --with-libxml
• L'extension libxml est activée par défaut, et elle peut être désactivée avec l'option --disable-libxml
• Fonctions libxml :
• libxml_clear_errors : Vide le buffer d'erreur libxml
• libxml_disable_entity_loader : Désactive le chargement des entités externes
• libxml_get_errors : Lit le tableau d'erreurs
• libxml_get_last_error : Lit la dernière erreur libxml
• libxml_set_external_entity_loader : Change le chargeur d'entités externes par défaut
• libxml_set_streams_context : Configure le contexte de flux pour la prochaine opération libxml
• libxml_use_internal_errors : Désactive le rapport d'erreur libxml et les stocke pour lecture ultérieure
• Pour activer le support de SOAP, configurez PHP avec --enable-soap.
• Il existe 5 fonctions de configuration SOAP dans le fichier php.ini.
PARTIE 4
Configuration
1. soap.wsdl_cache_enabled int
• Définition : Active ou pas le cache WSDL..
• Valeur par défaut : 1
2. soap.wsdl_cache_dir string
• Définition : Configure le nom du dossier où l'extension SOAP peut mettre les fichiers de cache.
• Valeur par défaut : /tmp
3. soap.wsdl_cache_ttl int
• Définition : Configure la durée de vie des fichiers dans le cache, exprimé en secondes.
• Valeur par défaut : 86400
4. soap.wsdl_cache int
• Définition : Si soap.wsdl_cache_enabled est actif, cette directive détermine le type de cache. Il peut prendre l'une des valeurs suivantes : WSDL_CACHE_NONE
(0), WSDL_CACHE_DISK (1), WSDL_CACHE_MEMORY (2) ou WSDL_CACHE_BOTH (3). Cela peut aussi être configuré via le paramètre options dans les
PARTIE 4
La classe SoapClient
La classe SoapClient fournit un client pour les serveurs SOAP 1.1 et SOAP 1.2.
Les méthodes sont :
• SoapClient::__call : Appelle une fonction SOAP (obsolète)
• SoapClient::__construct : Constructeur SoapClient
• SoapClient::__doRequest : Exécute une requête SOAP
• SoapClient::__getCookies : Get list of cookies
• SoapClient::__getFunctions : Retourne une liste de fonctions SOAP publiées
• SoapClient::__getLastRequest : Retourne la dernière requête SOAP
• SoapClient::__getLastRequestHeaders : Retourne les en-têtes de la dernière requête SOAP
• SoapClient::__getLastResponse : Retourne la dernière réponse SOAP
• SoapClient::__getLastResponseHeaders : Retourne les en-têtes de la dernière réponse SOAP
• SoapClient::__getTypes : Retourne une liste des types SOAP
• SoapClient::__setCookie : Définit un cookie pour les requêtes SOAP
PARTIE 4
La classe SoapServer
La classe SoapServer fournit un serveur pour les protocoles SOAP 1.1 et SOAP 1.2.
Méthodes :
• SoapServer::addFunction : Ajoute une ou plusieurs fonctions qui vont gérer les requêtes SOAP
• SoapServer::addSoapHeader : Ajoute un en-tête SOAP à une réponse
• SoapServer::__construct : Constructeur SoapServer
• SoapServer::fault : Emet une erreur SoapServer
• SoapServer::getFunctions : Retourne la liste des fonctions définies
• SoapServer::handle : Traite une requête SOAP
• SoapServer::setClass : Configure la classe qui sera utilisée pour gérer les requêtes SOAP
• SoapServer::setObject : Configure l'objet qui sera utilisé pour gérer les requêtes SOAP
• SoapServer::setPersistence : Active le mode persistant de SoapServer
Propriétés :
PARTIE 4
SoapFault
Représente une erreur SOAP.
Méthodes :
• SoapFault::__construct : Constructeur SoapFault.
• SoapFault::__toString : Produit une représentation chaîne d'un objet SoapFault.
Méthodes héritées:
• Exception::getMessage() : Récupère le message de l'exception.
• Exception::getPrevious() : Retourne le Throwable précédent. (Throwable : est l'interface de base pour tout objet qui peut être jeté grâce à la déclaration throw,
ceci inclus Error et Exception)
• Exception::getCode() : Récupère le code de l'exception.
• Exception::getFile() : Récupère le fichier dans lequel l'exception a été créée.
• Exception::getLine() : Récupère la ligne dans laquelle l'exception a été créée.
• Exception::getTrace() : Récupère la trace de la pile.
PARTIE 4
SoapHeader
Représente un en-tête SOAP.
Méthodes :
• SoapHeader::__construct : Constructeur SoapHeader.
Propriétés :
• public string $namespace;
• public string $name;
• public mixed $data = null;
• public bool $mustUnderstand;
• public string|int|null $actor;
PARTIE 4
SoapParam
Représente un paramètre dans un appel SOAP.
Méthodes :
• SoapParam::__construct : Constructeur SoapParam
Propriétés :
• public string $param_name;
• public mixed $param_data;
PARTIE 4
SoapVar
Une classe représentant une variable ou un objet qui utilise des services SOAP.
Méthodes :
• SoapVar::__construct : Constructeur SoapVar.
Propriétés :
• public int $enc_type;
• public mixed $enc_value = null;
• public ?string $enc_stype = null;
• public ?string $enc_ns = null;
• public ?string $enc_name = null;
• public ?string $enc_namens = null;
PARTIE 4
Fonctions SOAP
• is_soap_fault
• Syntaxe : is_soap_fault(mixed $object): bool
• Définition : Vérifie si SOAP retourne une erreur, sans utiliser les exceptions.
• Utilisation : Pour l'utiliser, créez un objet SoapClient avec l'option exceptions mise à zéro ou à false. Dans ce cas, la méthode SOAP va retourner un objet spécial
SoapFault, qui encapsule les détails de l'erreur (code d'erreur, message, acteur et détails). Si exceptions n'est pas configurée, SOAP va émettre une exception.
is_soap_fault() vérifie si le paramètre fourni est un objet SoapFault.
• use_soap_error_handler
• Syntaxe : use_soap_error_handler(bool $enable = true): bool
• Définition : Active le gestionnaire d'erreurs SOAP natif
• Utilisation : Retourne la valeur précédemment utilisée. Si le paramètre handler est mis à true, le détail des erreurs du serveur SoapServer seront envoyées au
client, comme message d'erreur SOAP. Si vaut false le gestionnaire d'erreur standard PHP sera utilisé. Le comportement par défaut est d'envoyer l'erreur au
client sous forme de message SOAP.
<?php
PARTIE 4
Introduction
attribue un nom).
• Introduction : est un framework micro-API qui convient parfaitement aux développeurs qui souhaitent un processus de création d'API simple et clair
• Lien : https://github.com/jmathai/epiphany
Distinction Client-serveur : Les responsabilités doivent être clairement distinguées entre le client et le serveur.
Sans état : La communication client – serveur s'effectue sans enregistrer l'état de la session de communication sur le serveur entre deux requêtes
successives. Le client ne doit pas être conçu pour se souvenir des requêtes précédentes.
Avec mise en cache : Une API REST doit pouvoir mettre en cache les interactions client-serveur.
Système en couches : Un client ne fera pas la différence entre une connexion directe serveur final ou à un serveur intermédiaire. Tous les serveurs
impliqués dans les demandes client peuvent être regroupé dans une hiérarchie.
Interface uniforme : Il devrait y avoir un format standard par lequel le client reçoit les réponses du serveur. Elle simplifie et découple l'architecture, ce qui
PARTIE 4
Code à la demande : Les serveurs peuvent temporairement étendre ou modifier les fonctionnalités d'un client en lui transférant du code exécutable.
Composants REST
Apache httpd
Serveur d’origine
Microsoft IIS
Squid
Passerelle CGI
Reverse Proxy
CERN Proxy
Proxy Netscape Proxy,
Gauntlet
Netscape Navigator
user agent Lynx
MOMspider
PARTIE 4
• Nous allons tester l'exemple de création d'URL à partir de notre API REST en utilisant
l'URL suivante : https://www.monsite.com/demo/rest-api/items/create
• Étape 7 : Créez des URL de demande SEO conviviales pour l'API REST
Par exemple, nous allons créer un fichier HTACCESS .htaccess pour rendre les URL conviviales pour le référencement.
Sitographie
https://www.oracle.com/fr/cloud/definition-web-service/
https://www.php.net/manual/fr/book.soap.php
https://fr.wikipedia.org/wiki/Representational_state_transfer#Contraintes_architecturales
https://waytolearnx.com/2019/07/creer-et-utiliser-une-api-rest-en-php.html
https://blog.nicolashachet.com/developpement-php/larchitecture-rest-expliquee-en-5-regles/
https://www.phpzag.com/how-to-create-simple-rest-api-in-php/
PARTIE 4