0% ont trouvé ce document utile (0 vote)
94 vues209 pages

Formation PHP5 v1.10

Le document présente un programme de formation sur le perfectionnement en PHP 5, axé sur les fonctions avancées et la programmation orientée objet (POO). Il couvre des sujets tels que la gestion des erreurs, l'authentification LDAP, les bases de données, XML/DOM/XSLT, les web services, et l'utilisation de PDF et d'e-mails. La formation inclut également des concepts avancés de POO, tels que les classes, les constructeurs, l'héritage, les interfaces et les design patterns.

Transféré par

cvjgq75r2b
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
94 vues209 pages

Formation PHP5 v1.10

Le document présente un programme de formation sur le perfectionnement en PHP 5, axé sur les fonctions avancées et la programmation orientée objet (POO). Il couvre des sujets tels que la gestion des erreurs, l'authentification LDAP, les bases de données, XML/DOM/XSLT, les web services, et l'utilisation de PDF et d'e-mails. La formation inclut également des concepts avancés de POO, tels que les classes, les constructeurs, l'héritage, les interfaces et les design patterns.

Transféré par

cvjgq75r2b
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PHP 5, perfectionnement

Fonctions avancées et Programmation


Orientée Objet

Cédric Couton / BeOtic


Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations


avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 2
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations


avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 3
Introduction
 Optimisation des développements par l’utilisation de briques
logicielles
 Réutiliser les briques dans d’autres applications
 Développer et valider indépendamment les briques
 Ne pas réinventer la roue
 Fiabilité
 Gain de temps

 Développement et réutilisabilité : stratégies et enjeux

 Accélération des développements


• Utilisation de composant maitrisé
• Montées en compétence moins longues

 Optimisation du coût de développement


• Réutilisation de composant déjà développé

BeOtic
BeOtic 4
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations


avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 5
Programmation Orientée Objet (POO)
 Classes, propriétés, méthodes

 Constructeur, destructeur

 Héritage et agrégation

 Introduction aux concepts avancés de POO

 PEAR

 PHPLib

BeOtic
BeOtic 6
Programmation Orientée Objet (POO)
 Classes, propriétés, méthodes

 Constructeur, destructeur

 Héritage et agrégation

 Introduction aux concepts avancés de POO

 PEAR

 PHPLib

BeOtic
BeOtic 7
POO : Classes, propriétés, méthodes
 Classe
 Bloc regroupant un ensemble de propriétés et de méthodes. Plusieurs
instances possibles. Déclaration via le mot clé « class ». Instanciation via le
mot clé « new » (on obtient ainsi un objet ou instance).

 Propriété

 Variable interne à une classe. Liée à l’instance. Peut aussi être appelée
attribut.

 Méthode

 Fonction interne à une classe. Liée à l’instance.

BeOtic
BeOtic 8
POO : Classes, propriétés, méthodes
 Déclaration
 Déclaration d’une classe via « class »

 Déclaration d’une propriété/variable de classe

BeOtic
BeOtic 9
POO : Classes, propriétés, méthodes
 Déclaration
 Déclaration d’une méthode/fonction sans paramètre

Sans retour de valeur (procédure) Avec retour de valeur

 Déclaration d’une fonction avec paramètres


Sans retour de valeur (procédure) Avec retour de valeur

BeOtic
BeOtic 10
POO : Classes, propriétés, méthodes
 Accès
 Instanciation d’une classe via « new »

 Accès à un attribut/propriété ou à une fonction/méthode via « -> »

² Affectation
Accès

 Accès interne à la classe via « $this-> »

 Test d’instance via « instanceof »

BeOtic
BeOtic 11
POO : Classes, propriétés, méthodes
 Visibilité et protection
 En PHP, il est possible d’associer une visibilité à un attribut ou à une
méthode.

 Public

 Accessible partout (classe elle-même, classe héritante, autres classes).

 Protected

 Accessible seulement par la classe elle-même ou une classe héritante


(premier contrôle).

 Private

 Accessible uniquement par la classe elle-même (contrôle total).

 Si rien, public par défaut.

BeOtic
BeOtic 12
POO : Classes, propriétés, méthodes
 Visibilité et protection : public

Déclaration des attributs et


méthodes publics

Accès à l’attribut public


« Auteur »

Accès à la méthode publique


« afficherInfos() »

BeOtic
BeOtic 13
POO : Classes, propriétés, méthodes
 Visibilité et protection : protected

Déclaration de la propriété
« protected »

La classe « Livre » hérite


de la classe « Document »

Accès à l’attribut « Titre »


de la classe parente
« Document »

BeOtic
BeOtic 14
POO : Classes, propriétés, méthodes
 Visibilité et protection : private

Accès à l’attribut privé « Reference », il ne peut


être accessible que dans la classe elle-même

BeOtic
BeOtic 15
POO : Classes, propriétés, méthodes
 Déclaration d’une classe

Déclaration de la classe

Déclaration des
attributs/propriétés

Déclaration des
méthodes/fonctions

BeOtic
BeOtic 16
Travaux Pratiques

TP 1
Classe / Instanciation

BeOtic
BeOtic 17
Programmation Orientée Objet (POO)
 Classes, propriétés, méthodes

 Constructeur, destructeur

 Héritage et agrégation

 Introduction aux concepts avancés de POO

 PEAR

 PHPLib

BeOtic
BeOtic 18
POO : Constructeur, destructeur
 Introduction
 En PHP 5 le constructeur est déclaré par la méthode « __construct() » et le
destructeur par la méthode « __destruct() ».

 À l’instanciation d’une classe (mot clé « new ») la méthode « __construct() »


est automatiquement appelée. À l’opposé, à la fin du
script/programme/requête la méthode « __destruct() » est appelée.

 Le constructeur sert à initialiser l’objet ainsi que ses attributs si nécessaire. Le


destructeur quant à lui s’occupe de faire le nettoyage.

 NB : Si le moteur php ( < 5.3.3) ne trouve pas de méthode « __construct() »


pour une classe donnée, il va chercher une méthode du nom de la classe, ceci
afin d’être compatible avec les versions précédentes de php.

BeOtic
BeOtic 19
POO : Constructeur, destructeur
 Introduction

Constructeur sans
paramètres

Constructeur avec
paramètre

BeOtic
BeOtic 20
POO : Constructeur, destructeur
 Introduction
Constructeur avec
plusieurs paramètres

Paramètre facultatif

BeOtic
BeOtic 21
POO : Constructeur, destructeur
 Introduction
 Exemple d’un constructeur et d’un destructeur :

Déclaration du
constructeur de la classe

Déclaration du
destructeur de la classe

Sortie de l’exécution de la page :

BeOtic
BeOtic 22
POO : Constructeur, destructeur
 Appel implicite vs explicite
 Les méthodes « __construct() » et « __destruct() » sont implicitement
appelées par le moteur.

 Cependant si une classe héritante déclare son propre constructeur, celui


de son parent ne sera pas appelé implicitement. Pour l’utiliser, il faudra
l’appeler explicitement via : « parent::__construct() ». Il en est de même
pour le destructeur.

 L’appel du constructeur ou du destructeur parent accepte les paramètres


si ceux-ci en attendent.

BeOtic
BeOtic 23
POO : Constructeur, destructeur
 Appel implicite vs explicite

Appel explicite du
constructeur de la classe
parente
La classe « Livre » hérite
de la classe « Document »

Appel implicite du
constructeur de la classe
« Livre » Appel explicite du
destructeur de la classe
parente

Appel implicite du
destructeur de la classe
« Livre »

BeOtic
BeOtic 24
POO : Bonnes pratiques
 Règle de nommage des variables/paramètres
 Utile pour s’y retrouver dans le code
 Meilleur compréhension

Exemples :
- Préfixe pour les paramètres (pParam1,
pParam2…)

- Préfix pour les propriétés/attributs de


classes (mAuteur, mTitre,…)

- Préfix pour les variables locales


(lVariable1, lVariable2, …)

BeOtic
BeOtic 25
Travaux Pratiques

TP 1
Classe / Instanciation
Constructeur

BeOtic
BeOtic 26
Programmation Orientée Objet (POO)
Classes, propriétés, méthodes

Constructeur, destructeur

 Héritage et agrégation

 Introduction aux concepts avancés de POO

 PEAR

 PHPLib

BeOtic
BeOtic 27
POO : Héritage et agrégation
 Règle de propagation
 L’héritage est utilisé afin d’adapter une classe à ses besoins. Ceci en
modifiant certaines de ses caractéristiques.

 Les classes enfants héritent automatiquement des méthodes et propriétés


des classes parentes.

 Grâce à l’héritage il est possible de :


 Surcharger les méthodes « public » ou « protected ».
 Changer la signature du constructeur (ajout de paramètres)
 Appeler les méthodes, ou accéder aux attributs « public » et «
protected » de la classe parente (via le mot clé « parent:: »)

 L’agrégation en php permet à une classe d’utiliser les instances d’autres


classes (exemple : un « Document » possède un « Auteur »).

BeOtic
BeOtic 28
POO : Héritage et agrégation
 Règle de propagation

Un document est lié à un


auteur (Agrégation)

Héritage de la classe
« Document » Un livre est composé
d’une « Preface »
(Composition)

Surcharge du constructeur
de la classe parente
« Document »

BeOtic
BeOtic 29
POO : Héritage et agrégation
 Polymorphisme

 Cette notion est directement liée à l’héritage.

 Un livre, un cd ou un dvd ont les caractéristiques d’un Document car ils


héritent tous de cette classe. Ils peuvent donc être traités comme des objets
de type Document.

 Une méthode générique de traitement peut ainsi prendre en paramètres ces


objets et les utiliser en tant que Document.

BeOtic
BeOtic 30
POO : Héritage et agrégation
 Polymorphisme

Les classes « Cd » et « Livre » héritent toutes les


deux de la classe « Document » elles peuvent donc
être traitées comme des classes « Document ».

BeOtic
BeOtic 31
Programmation Orientée Objet (POO)
 Classes, propriétés, méthodes

 Constructeur, destructeur

 Héritage et agrégation

 Introduction aux concepts avancés de POO

 PEAR

 PHPLib

BeOtic
BeOtic 32
POO : Introduction aux concepts avancés de POO
 Classe abstraite
 Une classe abstraite ne peut être instanciée, elle est déclarée avec le mot
clé « abstract ».

 Les classes filles doivent obligatoirement implémenter les méthodes


abstraites d’une classe mère abstraite (avec la même visibilité et la même
signature).

 Les méthodes abstraites sont seulement déclarées par leur signature (pas
d’implémentation).

 Une classe contenant au moins une méthode abstraite est obligatoirement


abstraite.

 Une classe ne peut étendre/hériter qu’une classe.

 Sert à factoriser le code (ex : centralisation en un endroit d’une partie du


code redondant de plusieurs classes).

 Souvent utilisée pour les DAO.

BeOtic
BeOtic 33
POO : Introduction aux concepts avancés de POO
 Classe abstraite
Déclaration de la classe
abstraite
Centralisation de
l’affectation du nom

Héritage de la classe
abstraite

Implémentation des méthodes


abstraites

BeOtic
BeOtic 34
POO : Introduction aux concepts avancés de POO
 Classe abstraite
Déclaration de la classe
abstraite
Centralisation de
l’affectation du nom

Héritage de la classe
abstraite

Implémentation des méthodes


abstraites

BeOtic
BeOtic 35
POO : Introduction aux concepts avancés de POO
 Interface
 Permet de définir des méthodes visibles depuis l’extérieur (API : Application
Programming Interface)

 Un peu comme une classe abstraite, sauf qu’aucune méthode n’y est
implémentées.

 Une classe implémentant une interface doit implémenter obligatoirement


les méthodes déclarées dans l’interface.

 Permet de déclarer des constantes. (mot clé « const »), accessible via
« NomClasse::nomConstante »

 Une classe peut implémenter plusieurs interfaces contrairement à


l’extension des classes abstraites ou le simple héritage.

 À la différence d’une classe abstraite, une interface ne peut avoir de


constructeur et ne peut avoir de méthode implémentée.

BeOtic
BeOtic 36
POO : Introduction aux concepts avancés de POO
 Interface

Déclaration de l’interface

Implémentation de l’interface

Implémentation des
méthodes de l’interface

BeOtic
BeOtic 37
POO : Introduction aux concepts avancés de POO
 Interface

Déclaration de l’interface

Implémentation de l’interface

Implémentation des
méthodes de l’interface

BeOtic
BeOtic 38
POO : Introduction aux concepts avancés de POO
 Design Pattern
 Des modèles de conception disponibles afin de ne pas « réinventer la
roue » à chaque projet.

 Des solutions reconnues à des problèmes courants.

 Son utilisation permet de renforcer le développement d’une application


Web.

 Les plus connus : MVC (Modèle Vue Contrôleur), Factory, Singleton


(parfois considéré comme anti pattern).

BeOtic
BeOtic 39
POO : Introduction aux concepts avancés de POO
 Design Pattern : MVC
 Séparation des parties (présentation, traitement, accès données). Exemple
simple : un fichier par partie.

Contrôleur

Vue

Modèle

BeOtic
BeOtic 40
POO : Introduction aux concepts avancés de POO
 Design Pattern : Singleton

Attribut qui contiendra l’instance


unique de la classe

Méthode pour récupérer l’instance du


singleton

Création de l’instance unique du


singleton

BeOtic
BeOtic 41
POO : Introduction aux concepts avancés de POO
 Design Pattern : Factory

Inclusion du fichier php correspondant au type de


base de données

Création de l’instance de classe du Driver


correspondant au type de base de données

BeOtic
BeOtic 42
Travaux Pratiques

TP 1
Héritage / Abstraction

BeOtic
BeOtic 43
Programmation Orientée Objet (POO)
Classes, propriétés, méthodes

Constructeur, destructeur

 Héritage et agrégation

 Introduction aux concepts avancés de POO

 PEAR

 PHPLib

BeOtic
BeOtic 44
POO : PEAR
 Utilisation de composants utilitaires
 PEAR est l’abréviation de « PHP Extension And Application Repository ».

 PEAR fournit une bibliothèque d’extensions PHP (PECL – PHP Extension


Code Library) comme :
• DB (fonctions de gestions de base de données, pour toutes les bases
de données SQL)
• XML_Parser (Méthodes utiles pour utiliser des documents XML)
• File (Méthodes utiles pour les fichiers et les dossiers)

 Les différentes extensions sont séparées en « paquets », qui sont des


projets distincts avec leur propre numéro de version. Il peuvent dépendre
les uns des autres.

 Tous les scripts respectent un certain nombre de règles qui les rendent
portables et réutilisables.

 http://pear.php.net/

BeOtic
BeOtic 45
POO : PEAR
 Exemple d’utilisation du paquet Date

Ajout de 10 jours à la date


courante

Calcul du nombre de jours


entre les deux dates

BeOtic
BeOtic 46
POO : PEAR
 Exemple d’utilisation du paquet MDB2

Connexion à la base de
données

Les objets/lignes retournés seront des


tableaux associatifs, attention les
colonnes sont en minuscule
setOption(« field_case », CASE_UPPER)
(MDB2_FETCHMODE_OBJECT pour la
forme objet)

Exécution de la requête

Retourne la première ligne du


résultat

Accès au champ « nom » dans le


tableau associatif retourné

BeOtic
BeOtic 47
POO : PEAR
 Exemple d’utilisation du paquet MDB2

Parcours de l’ensemble
des lignes du résultat

Attention le nom des


colonnes est en minuscule

BeOtic
BeOtic 48
Travaux Pratiques

TP 1
PEAR

BeOtic
BeOtic 49
Programmation Orientée Objet (POO)
Classes, propriétés, méthodes

Constructeur, destructeur

 Héritage et agrégation

 Introduction aux concepts avancés de POO

 PEAR

 PHPLib

BeOtic
BeOtic 50
POO : PHPLib
 Structure, conventions, paramètres et principales librairies
 PHPLib est un ensemble de classes complétant les fonctionnalités du
langage php. (http://www.sanisoft.com/phplib/manual/templateMethods.php )

 Exemples de classes :
 « DB_Sql » permet de gérer les connexions aux bases de données
(connexion, maniement des données, déconnexion…).
 « Auth » elle permet de gérer l’authentification
 « Template », pour la génération de template (Code html avec des
variables traitées par le php)
 « Session », « Perm », « Cart »….

 La classe « Template » est très connue car le système de template de


phpBB s’est basé dessus.

BeOtic
BeOtic 51
POO : PHPLib
 Exemple d’utilisation pour la gestion de template

Template contenant les variables à remplacer, on


peut définir une règle pour le nommage des
templates (*.tpl), ici « accueil.tpl »

Création du gestionnaire de templates

Définition d’un fichier associé à une variable


set_file(« nom_variable », « fichier template »)

Spécification des substitutions à effectuer

Exécution des substitutions, affichage du résultat (pparse) ,


et stockage dans une variable cible si besoin
pparse(« nom variable_cible », « nom variable_à_traiter »)

BeOtic
BeOtic 52
POO : PHPLib
 Exemple d’utilisation pour la gestion de template avec bloc

Template

Déclaration d’un bloc, commence par un « BEGIN »


et termine par un « END » (mots réservés)

BeOtic
BeOtic 53
POO : PHPLib
 Exemple d’utilisation pour la gestion
de template avec bloc

Déclaration du tableau des données à


afficher

Déclaration de l’utilisation d’un bloc


set_block(« nom variable_fichier », « nom du bloc
dans le template », « nom
variable_qui_remplacera_bloc_
dans_variable_fichier »)

Parcours des données à afficher

Traitement de l’affichage du bloc


parse(« nom
variable_representant_bloc_dans_variable
_fichier », « nom du bloc dans le
template », true)

BeOtic
BeOtic 54
POO : Supplémentaire
 Gestion des templates avec Smarty

Inclusion de la librairie

Instanciation de la classe

Affectation de la variable

Affichage du résultat

 Documentation : http://www.smarty.net/

BeOtic
BeOtic 55
POO : Supplémentaire
 Auto inclusion de classe
 Utilisation de l’autoload.

BeOtic
BeOtic 56
POO : Supplémentaire
 Garbage Collector (GC, Ramasse-miettes)
 Libère la mémoire au fur et à mesure de l’exécution d’une requête.

 Utile lors de l’exécution d’algorithme utilisant beaucoup de mémoire


(beaucoup de variables, tableaux, objets).

 Depuis la version 5.3 de PHP, beaucoup mieux géré (<= 5.2 problème de
fuite de mémoire avec les dépendances cycliques)

 Documentation : http://www.php.net/manual/fr/features.gc.refcounting-basics.php

BeOtic
BeOtic 57
Travaux Pratiques

TP 1
PEAR / Phplib

BeOtic
BeOtic 58
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 59
Gestion des erreurs
 Introduction
 Erreurs ou exceptions?

 Une « erreur » peut être apparentée à un bug comme par exemple une
division par 0 (Division by 0), un accès à un élément d’un tableau au-delà
de sa taille (Undefined offset). Elles sont détectées par le système.

 Une « exception » quant à elle peut être considérée comme un cas


particulier dans le déroulement du programme (Mauvais mot de passe,
règle non respectée). C’est le développeur qui décide où et quand il veut la
soulever et la traiter.

BeOtic
BeOtic 60
Gestion des erreurs
 Gestion des exceptions
 PHP offre une gestion des exceptions tout comme les autres langages de
programmation.

 Une exception est lancée via l’instruction : « throw ».

 Une exception est attrapée via l’instruction « catch ». Le code susceptible


de lancer l’exception doit être inclus dans une instruction « try ».

 Afin d’attraper des exceptions différentes, il est possible d’utiliser plusieurs


blocs « catch ».

 Une fois que l’exception est lancée, le moteur stoppe l’exécution du code et
tente de trouver un bloc catch correspondant. S’il n’en trouve pas, une
erreur fatale sera affichée.

 Un gestionnaire des exceptions peut être défini et spécifié via la fonction


« set_exception_handler() ». Utile en production car il est conseillé de
supprimer l’affichage des erreurs « php.ini:display_errors »

BeOtic
BeOtic 61
Gestion des erreurs
 Gestion des exceptions
Lancement de l’exception

Code non exécuté car l’exception a


été lancée avant

Capture de l’exception

Code exécuté car l’exception à été


attrapée

BeOtic
BeOtic 62
Gestion des erreurs
 Gestion des exceptions

Déclaration de deux
exceptions personnalisées,
dans des fichiers indépendant

Lancement des exceptions


personnalisées

Capture des différentes


exceptions

BeOtic
BeOtic 63
Gestion des erreurs
 Création d’un gestionnaire d’erreurs
Si un gestionnaire est déclaré, il captera seulement les exceptions non attrapées

Définition du gestionnaire
d’erreurs

Code exécuté lorsqu’une


exception avec le code
« ERREUR_GRAVE » a été
soulevée

Code exécuté lorsqu’une


erreur a été soulevée

Déclaration des méthodes à


appeler en cas d’erreur ou
d’exception

BeOtic
BeOtic 64
Gestion des erreurs
 Bufferisation et fichier de log
 Php fournit des méthodes utiles pour gérer la bufferisation comme :

 ob_start() : Démarrage de la bufferisation de la sortie, tout ce qui sera


affiché par la suite (echo, html…) sera stocké dans le buffer.

 ob_get_contents() : Permet de récupérer tout ce qu’il y a dans le


buffer.

 ob_end_flush() : Vide le contenu du buffer et l’affiche sur la sortie.

 ob_end_clean() : Vide le contenu du buffer.

 Pour la gestion des fichiers de logs, il y a la méthode error_log($message,


$type, $destinataire) :

 $type : 0 (ajouter au fichier de log paramétré pour le serveur), 1 (par


email au $destinataire), 3 (ajouter au fichier $destinataire)

BeOtic
BeOtic 65
Travaux Pratiques

TP 2
Exceptions

BeOtic
BeOtic 66
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 67
Authentification LDAP
 Introduction

 Openldap

 Configuration et démarrage

 Lecture - Connexion anonyme - Interrogation et


récupération de données.

 Écriture - Connexion administrateur - Formatage des


données et insertion.

BeOtic
BeOtic 68
Authentification LDAP
 Introduction

 Openldap

 Configuration et démarrage

 Lecture - Connexion anonyme - Interrogation et


récupération de données.

 Écriture - Connexion administrateur - Formatage des


données et insertion.

BeOtic
BeOtic 69
Authentification LDAP
 Introduction
 LDAP (Lightweight Directory Access Protocol) est un protocole standard de
gestion d’annuaires électroniques. Il permet, via le protocole TCP/IP,
d’accéder aux informations d’un annuaire électronique.

 Qu’est-ce qu’un annuaire? C’est un référentiel destiné à retrouver


facilement des personnes ou des organisations via un minimum
d’informations (ville, nom…).

 Annuaire électronique : une base de données spécialisée, qui stocke de


façon hiérarchique des informations et qui offre la possibilité d’administrer
de façon simple son contenu (trier, ajouter, modifier, organiser)

 LDAP est utilisé principalement pour authentifier les applications de façon


unique. Centralisation des informations utilisateurs pour les différentes
applications (évite une table pour gérer ces informations dans chaque
application).

BeOtic
BeOtic 70
Authentification LDAP
 Introduction
LDAP c’est :

 Un protocole : utilisé pour accéder aux informations de l’annuaire.

 Un modèle d’information : décrit le type de données contenues dans


l’annuaire.

 Un modèle de nommage : décrit la manière dont est organisée et


désignée l’information dans l’annuaire.

 Un modèle fonctionnel : décrit la manière d’accéder (lecture/écriture)


aux données.

 Un modèle de sécurité : décrit les mécanismes d’authentification et de


droit d’accès des utilisateurs.

 Des API : afin qu’un développeur puisse construire ses propres


applications clientes.

BeOtic
BeOtic 71
Authentification LDAP
 Introduction
 Le protocole définit la communication entre le client et le serveur.

 Il fournit des commandes de recherche, création, suppression…

 Il fournit des mécanismes de chiffrement tel que (SSL et TLS) afin


d’accéder aux données de façon sécurisée.

 Il permet l’authentification sécurisée via SASL.

BeOtic
BeOtic 72
Authentification LDAP
 Introduction
 Les données de l’annuaire sont structurées sous forme d’une arborescence
hiérarchique appelée DIT (Directory Information Tree).

dc=masociete,dc=com

ou=personnes ou=groupes

uid=ablot

 Chaque nœud de l’arbre est associé à une entrée dans l’annuaire.

 Chaque entrée est un objet abstrait ou réel qui contient un certain nombre
d’attributs la décrivant.

 Un attribut est défini par un nom (ex : givenName), un type (ex : Directory
string) et une valeur (ex : André).

BeOtic
BeOtic 73
Authentification LDAP
 Introduction
 Chaque nœud est identifié par :

 Son RDN (Relative Distinguished Name), il doit être un nom unique


dans la branche de l’objet (exemple : uid=ablot ou cn=André Blot).

 Son DN (Distinguished Name) qui est un identifiant unique. C’est le


chemin d’accès au nœud depuis la racine de l’arbre. Exemple :
« uid=ablot,ou=personnes,dc=masociete,dc=com ». Le DN est la
concaténation de l’ensemble des RDN des ascendants hiérarchiques.

dc=masociete,dc=com

ou=personnes ou=groupes

uid=ablot

BeOtic
BeOtic 74
Authentification LDAP
 Introduction
 Exemple d’entrée :

Attribut Valeur
Cn: André Blot
Uid: ablot
givenName: André

Sn: Blot

 Il existe deux types d’attributs :

 Les attributs utilisateurs : manipulés par les utilisateurs de l’annuaire


(nom, prénom…).

 Les attributs opérationnels : accessibles seulement par le serveur (date


de modification…)

BeOtic
BeOtic 75
Authentification LDAP
 Introduction
 LDAP fournit la notion de classes d’objets qui permet de caractériser une
entrée par un ensemble d’attributs optionnels ou obligatoires (devant
obligatoirement être renseignés dans l’objet qui en hérite).

 La classe d’objet est définie par son nom qui l’identifie, un OID qui peut
également l’identifier, une liste d’attributs obligatoires, une liste d’attributs
optionnels et un type.

 Il existe plusieurs types de classes d’objets :

 Abstraites : Désigne les classes non instanciables mais qui peuvent


être dérivées (ex: top), la classe « person » en hérite.

 Structurelles : Désigne les classes instanciables (ex : person). Elle doit


hériter directement ou indirectement de la classe « top »

 Auxiliaires : Désigne les classes permettant d’ajouter des attributs


facultatifs à des classes structurelles.

BeOtic
BeOtic 76
POO : Authentification LDAP
 Introduction
 Exemple de hiérarchie de classe d’objets :

top

person

organisationalPerson

inetOrgPerson

organisationalUnit

country

BeOtic
BeOtic 77
Authentification LDAP
 Introduction
 LDAP met à disposition un ensemble de classes et d’attributs par défaut qui
conviennent pour la majorité des applications.

 Exemples d’attributs utilisateurs :


 cn : Nom de l’objet
 givenName : Prénom de la personne
 objectClass : Classe d’objet
 userPassword : Mot de passe de l’utilisateur

 Exemples d’attributs opérationnels :


 attributeTypes : Liste des attributs de l'annuaire
 creatorsName : Contient le DN de l’objet ayant servi à la création de
l’objet
 createTimestamp : Contient la date de création de l’objet

BeOtic
BeOtic 78
Authentification LDAP
 Introduction
Exemple de classes :

 person :
 commonName
 Surname
 Description
 userPassword
…

 organizationalPerson :
 organizationUnitName
 Title
 postalAddress
…

 inetOrgPerson :
 Mail
 Photo
…

BeOtic
BeOtic 79
Authentification LDAP
 Introduction
 LDAP fournit un format d’échange de données appelé LDIF (LDAP Data
Interchange Format).

 Ce format permet de représenter les données de l’annuaire au format texte,


ce qui les rend plus facilement lisibles.

 On l’utilise principalement pour :


- Exporter / importer une base.
- Réaliser des opérations de type (CRUD) sur les entrées de l’annuaire.

 Chaque ligne du fichier est de la forme : « Nom de l’attribut : valeur »

BeOtic
BeOtic 80
Authentification LDAP
 Introduction
 Exemple de fichier LDIF :

dn: cn=André Blot,ou=Personnes,dc=masociete,dc=com


objectClass: top
objectClass: person Héritage des classes top, person,
objectClass: organizationalPerson organzationalPerson, inetOrgPerson
objectClass: inetOrgPerson
cn: André Blot
sn: Blot
givenName: André
mail: [email protected]
userPassword: {sha}KDIE3AL9DK
ou: Personnes
telephoneNumber: 0251242569

BeOtic
BeOtic 81
Authentification LDAP
 Introduction

 LDAP fournit une liste d’opérations de base afin de réaliser des actions sur
les entrées ou la structure de l’annuaire.

 Exemples d’opérations :

 Search : Pour effectuer une recherche dans l’annuaire à partir de


critères.

 Add : Pour ajouter une entrée dans l’annuaire.

 Delete : Pour supprimer une entrée dans l’annuaire.

 Bind : Pour s’authentifier sur le serveur via un identifiant et un mot de


passe.

BeOtic
BeOtic 82
Authentification LDAP
 Introduction
 Pour vérifier la bonne connexion au serveur ldap

ldapbind -h {serveur} -p {port} –D {dn} –w {password}

 Exemples :

ldapbind –h MW76100 -p 389 –D “cn=Manager,dc=maxcrc,dc=com” –w admin

ldapbind –h MW76100 -p 389 –D “cn=utilisateur1,ou=People,dc=maxcrc,dc=com”


–w motdepasse1

BeOtic
BeOtic 83
Authentification LDAP
 Introduction
 La lecture de données dans l’annuaire peut se faire via la commande
« ldapsearch ». Cette commande peut être utilisée en mode anonyme ou en
mode authentifié « paramètre –D et –W » (-x pour authentification simple).

 Exemple de requête anonyme pour récupérer les informations d’un


utilisateur :
ldapsearch -x -b dc=masociete,dc=com 'cn=Andre Blot'

Résultat :
# Andre Blot, Personnes, masociete.com
dn: cn=Andre Blot,ou=Personnes,dc=masociete,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Andre Blot
sn: Blot
givenName: Andre
mail: [email protected]
ou: Personnes
telephoneNumber: 0251242569

BeOtic
BeOtic 84
Authentification LDAP
 Introduction

 La commande « ldapsearch » permet également d’effectuer des


recherches plus complexes. Voici plusieurs exemples :

 Récupération de toutes les personnes ayant pour prénom « Andre » :


ldapsearch -x -b dc=masociete,dc=com ‘givenName=Andre'

 Récupération de toutes les personnes ayant pour prénom « Andre » et


un numéro de téléphone commençant par « 0251 » :
ldapsearch -x -b dc=masociete,dc=com ‘(&(givenName=Andre)(telephoneNumber=0251*))’

 Attention! Les parenthèses sont très importantes.

 Récupération de tous les objet de type personne :

ldapsearch -x -b dc=masociete,dc=com ‘objectClass=person'

BeOtic
BeOtic 85
Authentification LDAP
 Introduction

 Exemple de LDIF pour ajouter une entrée :

dn: cn=André Blot,ou=Personnes,dc=masociete,dc=com


objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: André Blot
sn: Blot
givenName: André
mail: [email protected]
userPassword: {sha}KDIE3AL9DK
ou: Personnes
telephoneNumber: 0251242569

Commande pour ajouter l’entrée dans l’annuaire :

ldapadd -x -D "cn=admin,dc=masociete,dc=com" -w admin -f personne.ldif

BeOtic
BeOtic 86
Authentification LDAP
 Introduction

 Exemple de LDIF pour modifier le numéro de téléphone d’une entrée :

dn: cn=Andre Michelin,ou=Personnes,dc=masociete,dc=com


changetype: modify
replace: telephonenumber
telephonenumber: 0251977689

Commande pour prendre en compte la modification :

ldapadd -x -D "cn=admin,dc=masociete,dc=com" -w admin -f personneModif.ldif

BeOtic
BeOtic 87
Authentification LDAP
 Introduction

 Exemple de LDIF pour la suppression d’une entrée :

dn: cn=Tony GALMICHE,dc=mondomaine,dc=com


changetype: delete

Commande pour prendre en compte la modification :

ldapadd -x -D "cn=admin,dc=masociete,dc=com" -w admin -f personneSupp.ldif

BeOtic
BeOtic 88
Authentification LDAP
 Introduction
 L’url d’accès à un annuaire LDAP est de la forme :

 ldap[s]//<hostname>:<port>/<base_name>

 Exemple : ldap://ldap.masociete.com/dc=masociete,dc=com

Un annuaire LDAP peut être utilisé pour :

 Référencer une liste de contacts, type « Pages blanches ».

 Centraliser les utilisateurs d’un réseau d’entreprise. Ainsi


l’authentification sur les machines du réseau se fera par le LDAP.

BeOtic
BeOtic 89
Authentification LDAP
 Introduction

 Openldap

 Configuration et démarrage

 Lecture - Connexion anonyme - Interrogation et


récupération de données

 Ecriture - Connexion administrateur - Formatage des


données et insertion

BeOtic
BeOtic 90
Authentification LDAP
 Openldap

 Openldap est une implémentation libre du protocole LDAP.

 Openldap fournit :

 Un service « sldapd », démon LDAP.

 Des bibliothèques implantant le protocole LDAP.

 Des utilitaires et des outils d’administration.

 La dernière version disponible est la version 2.4.

BeOtic
BeOtic 91
Authentification LDAP
 Introduction

 Openldap

 Configuration et démarrage

 Lecture - Connexion anonyme - Interrogation et


récupération de données

 Ecriture - Connexion administrateur - Formatage des


données et insertion

BeOtic
BeOtic 92
Authentification LDAP
 Configuration et démarrage

 Le fichier de configuration d’openldap est le fichier slapd.conf, voici les


principales propriétés du fichier :

 Suffix " dc=masociete,dc=com " : Indique la racine de la base LDAP

 Rootdn " dc=admin,dc=masociete,dc=com " : Indique le login de


l’administrateur

 Rootpw admin : Indique le mot de passe de l’administrateur. Il peut


être aussi défini de façon encryptée. Pour cela il suffit d’exécuter la
commande slappwd et de copier le résultat à la place du mot de passe en
clair (exemple : {SSHA}G3C4v6Rimqv4paGx6mlQhlKtwOEGBl8R)

BeOtic
BeOtic 93
Authentification LDAP
 Configuration et démarrage

 Dans le fichier de configuration, il est possible de paramétrer les accès à


l’annuaire en lecture/écriture, par exemple :

 Pour la modification du mot passe par l’utilisateur lui-même et par


l’administrateur :
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=masociete,dc=com" write
by anonymous auth
by self write
by * none

 Pour la lecture/modification des informations par l’administrateur et la


lecture par tous :

access to *
by dn="cn=admin,dc=masociete,dc=com" write
by * read

BeOtic
BeOtic 94
Authentification LDAP
 Configuration et démarrage

 Une fois le serveur paramétré, il faut le démarrer/redémarrer via la


commande :
/etc/init.d/slapd start/restart

 Test de connexion avec « ldapwhoami »


ldapwhoami -x -D "cn=admin,dc=masociete,dc=com" -w admin

 Exemple de LDIF pour ajouter l’élément racine :


dn: dc=masociete,dc=com
objectClass: dcObject
objectClass: organization
o: Ma Societe
dc: masociete

 Commande pour ajouter la racine :


ldapadd -x -D "cn=admin,dc=masociete,dc=com" -w admin -f racine.ldif

BeOtic
BeOtic 95
Authentification LDAP
 Introduction

 Openldap

 Configuration et démarrage

 Lecture - Connexion anonyme - Interrogation et


récupération de données

 Écriture - Connexion administrateur - Formatage des


données et insertion

BeOtic
BeOtic 96
Authentification LDAP
 Lecture - Connexion anonyme - Interrogation et
récupération de données
 En Php il existe l’extension php_ldap permettant d’effectuer des opérations
sur un annuaire ldap (à inclure dans le fichier php.ini).

 Pour se connecter à un annuaire ldap if faut :

 Initialiser une connexion avec l’annuaire via la commande


« ldap_connect($server, $port) »

 S’authentifier via la commande « ldap_bind($identifiant_de_connexion,


[$dn, [$password]]) ». Si le dn et le mot de passe ne sont pas
communiqués, la connexion sera considérée comme anonyme.

 Pour la déconnexion, il suffit d’utiliser la fonction « ldap_close($


identifiant_de_connexion) »

 L’extension php fournit d’autres fonctions pour l’administration de l’annuaire


comme : ldap_add, ldap_search, ldap_modify.

BeOtic
BeOtic 97
Authentification LDAP
 Lecture - Connexion anonyme - Interrogation et
récupération de données
 Afin de récupérer des données dans l’annuaire, la fonction à utiliser est
« ldap_search », voici ses principaux paramètres :

 identifiant : identifiant retourné par la méthode « ldap_connect() »


 base_dn : le dossier de base (ex : dc=masociete, dc=com)
 filtre : le filtre de recherche (ex : (objectClass=person));
 attributs : tableau listant les attributs qui doivent être retournés pour
les objets trouvés (ex : mail, name, dn). Si rien, ils seront tous retournés.

BeOtic
BeOtic 98
Authentification LDAP
 Lecture - Connexion anonyme - Interrogation et
récupération de données

Connexion au serveur

Authentification anonyme

Recherche des éléments

Récupération du résultat
sous forme de tableau
multidimentionnel

Parcours des enregistrements

BeOtic
BeOtic 99
Authentification LDAP
 Lecture - Connexion non anonyme - Interrogation et
récupération de données

Connexion au serveur

Authentification en tant
que manager

Recherche des éléments

Récupération du résultat
sous forme de tableau
multidimentionnel

Parcours des enregistrements

BeOtic
BeOtic 100
Authentification LDAP
 Introduction

 Openldap

 Configuration et démarrage

 Lecture - Connexion anonyme - Interrogation et


récupération de données

 Écriture - Connexion administrateur - Formatage des


données et insertion

BeOtic
BeOtic 101
Authentification LDAP
 Écriture - Connexion administrateur - Formatage des
données et insertion
 Pour l’ajout et la modification de données dans l’annuaire, les fonctions
disponibles sont « ldap_add », « ldap_modify », « ldap_delete ».

 ldap_add/ldap_modify (identifiant, dn, tableau_infos) :


 Identifiant : identifiant retourné par la méthode « ldap connect() »
 Dn : le dossier de base (ex : dc=masociete, dc=com) ou dn de l’objet à
modifier dans le cas d’une modification.
 Tableau_infos : Tableau associatif entre les attributs et les valeurs de
l’objet à insérer.

ldap_delete(identifiant, dn)
 Identifiant : identifiant retourné par la méthode « ldap connect() »
 Dn : dn de l’objet à supprimer (ex : cn=Marc Guillet,
ou=Personnes,dc=masociete,dc=com)

BeOtic
BeOtic 102
Authentification LDAP
 Écriture - Connexion administrateur - Formatage des
données et insertion
 Exemple d’ajout d’un objet dans le ldap :

 Exemple de modification :

 Exemple de suppression :

BeOtic
BeOtic 103
Travaux Pratiques

TP 3
LDAP

BeOtic
BeOtic 104
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 105
Base de données : manipulations avancées
 Base multitables et jointure : avantages et limites de la théorie.

 Intégrité transactionnelle : assurer la cohérence des données


dans un environnement internet.

 Procédures stockées : réutilisation de l’existant lors de


migrations technologiques.

 Champs multidimensionnels.

 Sécurité : formatage des entrées et requêtes paramétrées.

 PDO (PHP Data Object/API abstraite d’accès aux bases de


données).

 ODBC : outil passe-partout win32.

BeOtic
BeOtic 106
Base de données : manipulations avancées
 Base multitables et jointure : avantages et limites de la théorie.

 Intégrité transactionnelle : assurer la cohérence des données


dans un environnement internet.

 Procédures stockées : réutilisation de l’existant lors de


migrations technologiques.

 Champs multidimensionnels.

 Sécurité : formatage des entrées et requêtes paramétrées.

 PDO (PHP Data Object/API abstraite d’accès aux bases de


données).

 ODBC : outil passe-partout win32.

BeOtic
BeOtic 107
Base de données : manipulations avancées
 Base multitables et jointure.
 La séparation des données dans des tables différentes permet d’éviter les
données redondantes. Exemple :

 Les numéros de téléphone peuvent être stockés dans une table différente,
une jointure sera donc nécessaire pour récupérer les numéros de téléphone
associés à une personne.

SELECT P.*, T.TELEPHONE FROM PERSONNE P


JOIN TELEPHONE T ON P.ID = T.PERSONNE_ID

BeOtic
BeOtic 108
Base de données : manipulations avancées
 Base multitables et jointure.
 Un découpage trop fin nécessitera de nombreuses jointures et donc des
requêtes coûteuses.

Il faut plutôt chercher la logique fonctionnelle par rapport à l’optimisation de


stockage. Parfois la recherche d’optimisation peut aboutir au contraire de ce
qui est attendu.

BeOtic
BeOtic 109
Base de données : manipulations avancées
 Base multitables et jointure : avantages et limites de la théorie.

 Intégrité transactionnelle : assurer la cohérence des données


dans un environnement internet.

 Procédures stockées : réutilisation de l’existant lors de


migrations technologiques.

 Champs multidimensionnels.

 Sécurité : formatage des entrées et requêtes paramétrées.

 PDO (PHP Data Object/API abstraite d’accès aux bases de


données).

 ODBC : outil passe-partout win32.

BeOtic
BeOtic 110
Base de données : manipulations avancées
 Intégrité transactionnelle. Cohérence des données.
 Pratiquer la politique du tout ou rien afin d’éviter des incohérences en base.

 Une transaction est démarrée par un « begin » puis terminée par un


« commit » ou un « rollback ».

 Le commit permet de rendre persistantes les modifications ayant eu lieu


depuis le « begin ». Ainsi, si un problème a lieu durant la transaction, on
annule tout via le « rollback ».

 Tant qu’il n’y a pas eu de commit, les modifications ne sont visibles que par
l’utilisateur courant et ne sont pas persistées en base.

BeOtic
BeOtic 111
Base de données : manipulations avancées
 Intégrité transactionnelle. Cohérence des données.
Exemple :

 Deux étapes sont nécessaires pour insérer une personne :


 Insertion de la personne.
 Insertion de ses numéros de téléphone.

 Si un problème a lieu à l’insertion des numéros, on peut annuler l’insertion


de la personne (1ère requête) grâce au « rollback ».

 Si tout s’est bien déroulé, le « commit » permettra de valider la transaction


et de rendre visibles les modifications aux autres utilisateurs.

BeOtic
BeOtic 112
Base de données : manipulations avancées
 Intégrité transactionnelle. Cohérence des données.
Démarrage de la transaction
« begin »

« commit » de la transaction si
tout s’est bien passé

« rollback » de la transaction si
un problème est survenu

BeOtic
BeOtic 113
Base de données : manipulations avancées
 Base multitables et jointure : avantages et limites de la théorie.

 Intégrité transactionnelle : assurer la cohérence des données


dans un environnement internet.

 Procédures stockées : réutilisation de l’existant lors de


migrations technologiques.

 Champs multidimensionnels.

 Sécurité : formatage des entrées et requêtes paramétrées.

 PDO (PHP Data Object/API abstraite d’accès aux bases de


données).

 ODBC : outil passe-partout win32.

BeOtic
BeOtic 114
Base de données : manipulations avancées
 Procédures stockées : réutilisation de l’existant.

 Lors d’une migration de langage comme de Cobol/PL/SQL vers


PHP/PL/SQL, les procédures stockées peuvent être conservées afin de les
réutiliser.

 Gain de temps en terme de développement : évite de redévelopper en PHP


du code (contenu dans la procédure) qui a déjà fait ses preuves.

 L'un des intérêts du PL/SQL est d'être exécuté dans la base de données;
d'où un gain de performance important, qui peut être utile quelle que soit la
technologie utilisée lors de la migration (point à vérifier pour chaque projet
car la difficulté de maintenance est plus importante).

 Supporté par Mysql depuis la version 5.0.0.

BeOtic
BeOtic 115
Base de données : manipulations avancées
 Procédures stockées : réutilisation de l’existant.

 Exemple de PL/SQL:

 Appel de la procédure depuis PHP :

Appel de la procédure

BeOtic
BeOtic 116
Base de données : manipulations avancées
 Base multitables et jointure : avantages et limites de la théorie.

 Intégrité transactionnelle : assurer la cohérence des données


dans un environnement internet.

 Procédures stockées : réutilisation de l’existant lors de


migrations technologiques.

 Champs multidimensionnels.

 Sécurité : formatage des entrées et requêtes paramétrées.

 PDO (PHP Data Object/API abstraite d’accès aux bases de


données).

 ODBC : outil passe-partout win32.

BeOtic
BeOtic 117
Base de données : manipulations avancées
 Champs multidimensionnels.

 Certains SGBD offrent la possibilité de créer des champs


multidimensionnels.

 Utilisés dans le décisionnel pour le pilotage d’une entreprise (BI). Exemple


de logiciel : Oracle Hyperion, Oracle Business Intelligence.

 Possibilité de représenter les données avec un cube OLAP (Online


Analytical Processing), qui donne une vision multi axes des informations.

BeOtic
BeOtic 118
Base de données : manipulations avancées
 Champs multidimensionnels.

 Postgresql permet de créer des champs pouvant contenir des tableaux


multidimensionnels.

Champ correspondant à un tableau de


VARCHAR(255), le tableau peut aussi
être déclaré pour plusieurs
dimensions, exemple : INT[][]

Récupération du premier
numéro pour chaque personne
Insertion d’un tableau de 2 numéros
Récupération du nombre de
numéros pour chaque personne

BeOtic
BeOtic 119
Base de données : manipulations avancées
 Base multitables et jointure : avantages et limites de la théorie.

 Intégrité transactionnelle : assurer la cohérence des données


dans un environnement internet.

 Procédures stockées : réutilisation de l’existant lors de


migrations technologiques.

 Champs multidimensionnels.

 Sécurité : formatage des entrées et requêtes paramétrées.

 PDO (PHP Data Object/API abstraite d’accès aux bases de


données).

 ODBC : outil passe-partout win32.

BeOtic
BeOtic 120
Base de données : manipulations avancées
 Sécurité : formatage des entrées et requêtes paramétrées.

 Un code PHP mal sécurisé peut être la proie de pirates.


(magic_quotes_gpc obsolète depuis 5.3.0)

 Injection SQL : Une requête sql peut être saisie dans un formulaire et
compromettre la sécurité (exemple : requête d’administration).

 Injection de code (exemple : include (« $page ») ).

 Il faut donc vérifier chaque paramètre reçu depuis un formulaire :

 Pour une date : par exemple, vérifier le formalisme avec une


expression régulière.

 Pour un entier : utiliser une fonction php comme « is_numeric() »

 Pour une chaîne de caractères : protéger les caractères spéciaux via


« mysql_real_escape_string() » par exemple. Ou encore limiter sa taille.

 Le but est de vérifier l’intégrité et le formalisme des données avant de les


traiter.
BeOtic
BeOtic 121
Base de données : manipulations avancées
 Sécurité : formatage des entrées et requêtes paramétrées.

 Exemple d’injection SQL sur un formulaire d’authentification.

Si le login saisi est : « ' OR 'x'='x »

Si le password saisi est : « ' OR 'x'='x »

La requête obtenue sera :


« SELECT * FROM PERSONNE WHERE login='' OR 'x'='x' AND PASSWORD = '' OR 'x'='x‘ »
Elle retournera toujours un résultat, c’est une faille de sécurité !

BeOtic
BeOtic 122
Base de données : manipulations avancées
 Sécurité : formatage des entrées et requêtes paramétrées.

 Exemple de palliatif.

Utilisation de la méthode :
« mysql_real_esacpe_string »,
le login et le password deviendront :
« \' OR \'x\'=\'x »
Le paramètre est ainsi sécurisé

BeOtic
BeOtic 123
Base de données : manipulations avancées
 Base multitables et jointure : avantages et limites de la théorie.

 Intégrité transactionnelle : assurer la cohérence des données


dans un environnement internet.

 Procédures stockées : réutilisation de l’existant lors de


migrations technologiques.

 Champs multidimensionnels.

 Sécurité : formatage des entrées et requêtes paramétrées.

 PDO (PHP Data Object/API abstraite d’accès aux bases de


données).

 ODBC : outil passe-partout win32.

BeOtic
BeOtic 124
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).

 Extension PHP permettant d’accéder à une base de données de façon


orientée objet, tout en faisant abstraction de l’implémentation de la base
(mysql, oracle…). Les fonctions d’accès deviennent universelles
(mysql_connect, mysql_query, oci_execute, sqlite_query…)

 Permet de migrer plus facilement d’une base à l’autre (exemple de mysql


vers oracle).

 Les classes sont étendables et donc elles offrent la possibilité de


surcharger certaines de leurs méthodes.

 Offre un premier niveau de sécurisation des paramètres.

BeOtic
BeOtic 125
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).
 Requête de sélection

Instanciation et connexion

Exécution de la requête, via la


méthode « query »

Parcours des éléments du résultat (


« fetchAll » retournera un tableau avec
l’ensemble des lignes)

Accès à l’attribut par un tableau


associatif, le nom des colonnes est en
majuscule

BeOtic
BeOtic 126
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).
 Requête de sélection

Instanciation et connexion

Exécution de la requête, via la


méthode « query »

Définition du type d’objet utilisé


pour le parcours des résultats, ici ce
sera sous forme d’objet, pour un
tableau associatif on utilisera «
FETCH_ASSOC », ou alors
directement dans le fetch ou lors du
query

Parcours des éléments du résultat (


« fetchAll » retournera un tableau avec
l’ensemble des lignes)

Accès à l’attribut directement puisque le


type d’objet défini est « OBJET »,
attention le nom des colonnes est en
majuscule

BeOtic
BeOtic 127
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).
 Requête de mise à jour

Exécution de la requête, utilisation


de la méthode « exec » retourne le
nombre de lignes impactées
contrairement au « query »

BeOtic
BeOtic 128
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).

 Utilisation du « prepare »

 Plan d’exécution calculé qu’une seule fois côté SGBD (donc


plus rapide)
 Avantage lorsque la requête est exécutée plusieurs fois à la
suite
 Plus grande sécurité des valeurs insérées via le « bindValue »
ou « bindParam »

BeOtic
BeOtic 129
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).
 Utilisation du « prepare » et du « bindValue ».
Préparation de la requête avec les
paramètres

Association de la valeur de
« $lNom » au paramètre « nom » de
la requête.

Exécution de la requête préparée

BeOtic
BeOtic 130
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).
 Utilisation du « prepare » et du « bindParam ».

Préparation de la requête avec les


paramètres

Association de la variable « $lNom »


au paramètre « nom » de la requête.
Si la valeur de « $lNom » change, le
paramètre de la requête est
automatiquement modifié.

BeOtic
BeOtic 131
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).
 Utilisation du « beginTransaction » « commit » « rollback ».

Démarrage de la transaction

Récupération de l’id de la dernière


ligne insérée

Commit de la transaction si tout est ok

BeOtic
BeOtic 132
Base de données : manipulations avancées
 PDO (API abstraite d’accès aux bases de données).

 rowCount() : fonction utilisée sur l’objet résultant de la


fonction « query() » : retourne le nombre de lignes trouvées

 errorInfo() : fonction utilisée sur l’objet PDO pour récupérer


le détail d’une erreur lorsque la fonction « query() » retourne
false

 fetchAll() : fonction utilisée pour récupérer toutes les lignes,


en une seul fois, dans un tableau.

BeOtic
BeOtic 133
Base de données : manipulations avancées
 Base multitables et jointure : avantages et limites de la théorie.

 Intégrité transactionnelle : assurer la cohérence des données


dans un environnement internet.

 Procédures stockées : réutilisation de l’existant lors de


migrations technologiques.

 Champs multidimensionnels.

 Sécurité : formatage des entrées et requêtes paramétrées.

 PDO (PHP Data Object/API abstraite d’accès aux bases de


données).

 ODBC : outil passe-partout win32.

BeOtic
BeOtic 134
Base de données : manipulations avancées
 ODBC : outil passe-partout win32.

 ODBC (Open DataBase Connectivity) : composant de connexion aux


bases de données (Oracle, Mysql, SQL Server, Access).

 Lors de la déclaration de la source de données, un driver odbc est


nécessaire. C’est lui qui se chargera de la communication avec le SGBD.

 PHP fournit un client ODBC unifié qui donne accès à différentes bases de
données qui ont respecté la norme ODBC pour implémenter leur API
(Sybase, Oracle, SQL Server).

BeOtic
BeOtic 135
Base de données : manipulations avancées
 ODBC : outil passe-partout win32.
Initialisation du DSN
Le nom du driver doit correspondre à un
driver disponible dans le gestionnaire ODBC
de windows

Connexion à la base via la méthode


« odbc_connect »

Exécution de la requête via la


méthode « odbc_exec »

Parcours des résultats via la méthode


« odbc_fetch_row »

Accès à l’attribut du résultat courant


via la méthode « odbc_result »

BeOtic
BeOtic 136
Base de données : manipulations avancées
 ODBC : outil passe-partout win32.

 Exemple d’accès à une base Access

BeOtic
BeOtic 137
Travaux Pratiques

TP 4
Base de données
avancée

BeOtic
BeOtic 138
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 139
XML/DOM/XSLT
 XML : Format et validation.

 DOM et XPath - Création, analyse.

 Transformateurs XSL - Utilisation de XSLT.

 Clients riches : SWF et Ajax - Principes et enjeux.

BeOtic
BeOtic 140
XML/DOM/XSLT
 XML : Format et validation.

 DOM et XPath - Création, analyse.

 Transformateurs XSL - Utilisation de XSLT.

 Clients riches : SWF et Ajax - Principes et enjeux.

BeOtic
BeOtic 141
XML/DOM/XSLT
 XML : Format et validation.

 XML (Extensible Markup Language).

 Langage de balisage.

 Un fichier XML peut être utilisé comme une base de données. Mais reste
limité en terme de performance car assez verbeux.

 Très utilisé pour les échanges de données entre applications.

 Stocke les données de façon arborescente.

BeOtic
BeOtic 142
XML/DOM/XSLT
 XML : Format et validation.

 Exemple de fichier xml : Version 1.0 ou 1.1 (apporte meilleur gestion


des différentes version d’unicode)

Noeuds

Attributs

BeOtic
BeOtic 143
XML/DOM/XSLT
 XML : Format et validation.

 La validation d’un fichier XML peut s’effectuer soit par un DTD ou un XSD.

 DTD (Document Type Definition) :

 Il décrit le format du XML.

 Il permet aux outils de validation de valider le XML.

 Il a sa propre grammaire.

 On y fait référence dans l’entête du fichier XML.

 XSD (XML Schéma Definition), un peu le successeur du DTD :

 Format XML donc utilisable comme tel (validation, parsing).

 Description plus fine (ordre des éléments, nombre d’occurrences,


typage avancé (booléen, entiers…).

 Tout comme le DTD, on peut y faire référence dans l’entête.

BeOtic
BeOtic 144
XML/DOM/XSLT
 XML : Format et validation.
Peut être généré à partir d’outil
comme « freeformatter.com »
XSD
depuis xml ou via l’editeur de
eclipse (sorte de modeler)

DTD

BeOtic
BeOtic 145
XML/DOM/XSLT
 XML : Format et validation.

Déclaration du DTD associé

Déclaration du XSD associé

BeOtic
BeOtic 146
XML/DOM/XSLT
 XML : Format et validation.
 Code php pour valider un document XML

Validation à partir du DTD déclaré


dans le XML « DOCTYPE… »

Validation à partir du XSD, si


retourne false, possiblité d’utiliser
la fonction libxml_get_errors()
pour récupérer la liste des erreurs

NB : Si la validation échoue, un warning est affiché avec la raison de l’échec, exemple :

BeOtic
BeOtic 147
XML/DOM/XSLT
 XML : Format et validation - Type disponible dans le XSD (W3C).

BeOtic
BeOtic 148
XML/DOM/XSLT
 XML - Format et validation.

 DOM et XPath - Création, analyse.

 Transformateurs XSL - Utilisation de XSLT.

 Clients riches : SWF et Ajax - Principes et enjeux.

BeOtic
BeOtic 149
XML/DOM/XSLT
 DOM et XPath - Création, analyse.

 DOM (Document Object Model) :

 Standard W3C d’accès aux documents XML.

 Lecture : parcours de l’arborescence des éléments.

 Ecriture : construction ou modification de l’arborescence.

 XPath : Langage de navigation dans un document XML. Ce sont en


quelque sorte des requêtes d’accès aux données du XML.

 Début d’expression XPath :


• telephones/telephone/... (exp. relative)
• /personnes/personne/... (exp. absolue)

BeOtic
BeOtic 150
XML/DOM/XSLT
 DOM et XPath - Création, analyse.
 Utilisation de la classe DOMDocument pour le parcours.

Chargement du fichier XML via la


méthode « load »

Récupération de tous les nœuds


« personne » via la méthode
« getElementByTagName »
(retourne DOMNodeList)

Parcours des nœuds « personne »

Récupération de l’attribut « nom »


du nœud courant via la méthode
« getAttribute »

Récupération du nœud ayant comme


attribut « id » la valeur « p1 » via la
méthode « getElementById »

Récupération du contenu de la balise


« telephone » via l’attribut « nodeValue »

BeOtic
BeOtic 151
XML/DOM/XSLT
 DOM et XPath - Création, analyse.
 Utilisation de la classe DOMDocument pour la création.

Désignation du type de sortie,


formatée ou non.

Création du nœud root via la


méthode « createElement » (attenion,
il est pour le moment un électron
libre, la commande suivante l’ajoute
au fichier)

Ajout des attributs du nœud via la


méthode « setAttribute », transforme
automatiquement les caractères spéciaux
ex « ‘’ » en « &quote; »

Ajout des différents nœuds dans leur


parent via la méthode « appendChild »

Enregistrement via la méthode « save »

BeOtic
BeOtic 152
XML/DOM/XSLT
 DOM et XPath - Création, analyse.
 Utilisation de la classe DOMDocument pour la création.

Déclaration de l’utilisation du dtd

Création du document

BeOtic
BeOtic 153
XML/DOM/XSLT
 DOM et XPath - Création, analyse.
 Utilisation de la classe DOMDocument pour la création.

Création du nœud « telephone » et


affectation de son contenu vi la
méthode « nodeValue »

BeOtic
BeOtic 154
XML/DOM/XSLT
 DOM et XPath - Création, analyse.

 Utilisation de la classe DomXPath.

Instanciation de la classe « DomXPath »

Requête pour rechercher le nœud


« personne » ayant pour attribut « id »
la valeur « p2 »

Exécution d’une requête XPath via la


méthode « query »
(retourne DOMNodeList, utilisation de la
fonction item() pour récupérer à un le
DOMNode à index précis)

Requête pour rechercher les nœuds


« personne » qui ont un nœud
« telephone » avec comme valeur
« 0125365898 »

Récupération du premier nœud de la


liste retournée par la requête

BeOtic
BeOtic 155
XML/DOM/XSLT
 XML - Format et validation.

 DOM et XPath - Création, analyse.

 Transformateurs XSL - Utilisation de XSLT.

 Clients riches : SWF et Ajax - Principes et enjeux.

BeOtic
BeOtic 156
XML/DOM/XSLT
 Transformateurs XSL - Utilisation de XSLT.

 XSL (Extensible Style Sheet Language).

 Langage qui permet de structurer un document XML (comme le css


pour le HTML).

 Format XML.

 2 éléments :
 XSLT : Transformation des données.

 XSL-FO : Formatage des données


pour la mise en page (PDF, PostScript).

 En PHP la classe XSLTProcessor peut être utilisée

BeOtic
BeOtic 157
XML/DOM/XSLT
 Transformateurs XSL - Utilisation de XSLT.

BeOtic
BeOtic 158
XML/DOM/XSLT
 Transformateurs XSL - Utilisation de XSLT.
Définition de la variable « separateur »
qui pourra être utilisée par la suite

Template à appliquer sur la racine

Applique les templates disponibles sur


les nœuds trouvés

Template à appliquer sur les nœuds « personne »

Affiche la valeur de l’attribut « nom »

Parcours des nœuds « telephone »

Affiche la valeur du noeud

Condition d’ajout de la valeur de la


variable « separateur » :
Seulement s’il y a un nœud suivant

BeOtic
BeOtic 159
XML/DOM/XSLT
 XML - Format et validation.

 DOM et XPath - Création, analyse.

 Transformateurs XSL - Utilisation de XSLT.

 Clients riches : SWF et Ajax - Principes et enjeux.

BeOtic
BeOtic 160
XML/DOM/XSLT
 Clients riches : SWF et Ajax - Principes et enjeux.

 Echange XML avec le serveur (attention aux performances).

 Composants graphiques dynamiques (courbe, radar, scatter…).

 Améliorer l’interaction avec l’utilisateur (chargement dynamique de


liste). Rapprochement du besoin fonctionnel de l’application.

 Les frameworks Ajax du marché (Jquery, Prototype, Dojo…) gèrent la


compatibilité avec la plupart des navigateurs (Firefox, IE…),
(XMLHttpRequest ou Microsoft.XMLHTTP).

 Contrairement aux SWF, Ajax n’a pas besoin de plugin (flash player).

BeOtic
BeOtic 161
Travaux Pratiques

TP 5
XML

BeOtic
BeOtic 162
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 163
Web Services et SOAP
 Introduction.

 Annuaires de services et accessibilité.

 WSDL et SOAP.

 Créer un Web Service et son fichier de description.

 Utiliser un Web Service.

BeOtic
BeOtic 164
Web Services et SOAP
 Introduction.

 Annuaires de services et accessibilité.

 WSDL et SOAP.

 Créer un Web Service et son fichier de description.

 Utiliser un Web Service

BeOtic
BeOtic 165
Web Services et SOAP
 Introduction.

 Un web service fournit des services distants accessibles de n’importe où et


par n’importe qui (exemple : liste de produits, météo, heure).

 Utilisé pour les échanges entre les applications.

 Indépendant du langage (de l’extérieur on ne voit que la définition des


méthodes).

 Met à disposition un fichier décrivant ses services, WSDL (Web Service


Description Language) :
 Méthodes disponibles
 Les paramètres
 Les types de structures d’échange (objet, tableau…)

 Utilisé par les comparateurs (exemple : Santiane, eBookers)

BeOtic
BeOtic 166
Web Services et SOAP
 Introduction.

 SOAP (Simple Object Access Protocol) : Protocol RPC d’échange de


messages au format XML .

 Il permet l’invocation de méthodes d’objets distants.

 Un flux SOAP est composé d’une enveloppe, d’un entête (optionnel) et d’un
corps.

 Les librairies clientes fournies pour interroger un service se chargent de


transformer la requête en flux SOAP pour qu’elle puisse être décodée côté
serveur et traitée. Il en est de même pour le retour au client.

BeOtic
BeOtic 167
Web Services et SOAP
 Introduction.

 Annuaires de services et accessibilité.

 WSDL et SOAP.

 Créer un Web Service et son fichier de description.

 Utiliser un Web Service.

BeOtic
BeOtic 168
Web Services et SOAP
 Annuaire des services et accessibilité.

 UDDI (Universal Description Discovery And Integration) : spécification pour


la publication et la recherche de services.

 Le but est de permettre aux sociétés de publier leurs services.

 Répertorie tous les services disponibles d’une organisation.

 Plus souvent utilisé en interne sur l’intranet.

 http://soapclient.com/uddisearch.html

BeOtic
BeOtic 169
Web Services et SOAP
 Introduction.

 Annuaires de services et accessibilité.

 WSDL et SOAP.

 Créer un Web Service et son fichier de description.

 Utiliser un Web Service.

BeOtic
BeOtic 170
Web Services et SOAP
 WSDL et SOAP

Déclaration des types complexes


« ListePersonne » et « Personne »

Déclaration des paramètres de la


requête

Déclaration des paramètres de


retour de la réponse. Élément de
type « ListePersonne »

Déclaration du service

BeOtic
BeOtic 171
Web Services et SOAP
 WSDL et SOAP.

 Exemple de flux SOAP.


Requête

Réponse

BeOtic
BeOtic 172
Web Services et SOAP
 Introduction.

 Annuaires de services et accessibilité.

 WSDL et SOAP.

 Créer un Web Service et son fichier de description.

 Utiliser un Web Service.

BeOtic
BeOtic 173
Web Services et SOAP
 Créer un Web Service et son fichier de description.

 Exemple de web service en php (SoapServer):

Classe qui sera publiée en tant que


fournisseur de service

Création du service avec son wsdl

Affectation de la classe à publier

Traitement de la requête

BeOtic
BeOtic 174
Web Services et SOAP
 Créer un Web Service et
son fichier de description.

 Générateurs existants :

 Eclipse WSDL Editor

 PHP WSDL Generator

BeOtic
BeOtic 175
Web Services et SOAP
 Introduction.

 Annuaires de services et accessibilité.

 WSDL et SOAP.

 Créer un Web Service et son fichier de description.

 Utiliser un Web Service.

BeOtic
BeOtic 176
Web Services et SOAP
 Utiliser un Web Service

 Exemple de client de web service en php (SoapClient) :

Url d’accès au wdsl du webservice

Déclaration du client

Appel de la méthode distante


« listerLesPersonnes »

Traitement du résultat de
l’appel du service

BeOtic
BeOtic 177
Travaux Pratiques

TP 6
Webservice

BeOtic
BeOtic 178
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 179
PDF pour AcrobatReader
 Opérations de base - Texte et mise en page.

 Opérations avancées - Images et tracés vectoriels.

BeOtic
BeOtic 180
PDF pour AcrobatReader
 Introduction.

 FPDF (v1.7 en 2011, < 100Ko) est une librairie PHP (free) qui permet de
générer des fichiers PDF :

 Spécification de la position des éléments

 Spécification du style des éléments

 Insertion d’image

…

 TCPDF est une librairie (v6 en 2014), intégrée dans joomla, drupal…, mais
fichiers assez lourds (peut aller jusqu’à 1Mo suivant les options) donc à
chaque exécution le code est chargé (source de problème de performance)

BeOtic
BeOtic 181
PDF pour AcrobatReader
 Opérations de base - Texte et mise en page.

 Opérations avancées - Images et tracés vectoriels.

BeOtic
BeOtic 182
PDF pour AcrobatReader
 Opérations de base - Texte et mise en page.

 Voici quelques fonctions importantes de FPDF :

 AddPage (orientation, format)


• Orientation : P (portrait), L (Paysage).
• Format : A4, A3…

 SetFont (police, style, taille)


• Police : Times, Courier…
• Style : B (Gras), I (italique), U (souligné). On peut les combiner.
• Taille : Taille de la police en points.

 Cell (largeur, hauteur, texte, bordure, position, alignement)


• Largeur : Largeur de la cellule (par défaut 0).
• Hauteur : hauteur de la cellule (par défaut 0).
• Texte : Texte à afficher.
• Bordure : 0 (aucune bordure), 1 (avec bordure), LTRB (gauche, haut,
droite, bas).
• Position : position du curseur après l’affichage : 0 (droite), 1 (début de la
ligne suivante), 2 (en dessous).
• Alignement : L (gauche), C (centré), R (droite).

BeOtic
BeOtic 183
POO : PDF pour AcrobatReader
 Opérations de base - Texte et mise en page.

 Exemple :

Définition de la police

Positionnement du titre

Positionnement du texte en x et y

Rend sur la sortie le pdf (header


automatiquement ajouté)

BeOtic
BeOtic 184
PDF pour AcrobatReader
 Opérations de base - Texte et mise en page.

 Opérations avancées - Images et tracés vectoriels.

BeOtic
BeOtic 185
PDF pour AcrobatReader
 Opérations avancées - Images et tracés vectoriels.

 Exemple :

Insertion d’une image en


position x(150) y (10) et
pour largeur (10)

Définition de la taille du trait

Définition de la couleur du trait

Tracé d’un trait débutant


en position x(50), y(50) et
terminant en x(70), y(70)

 couleur RGB : http://www.colorpicker.com

BeOtic
BeOtic 186
PDF pour AcrobatReader
 Utilisation de phpToPDF
 Exemple d’ajout de tableau dans un pdf (phpToPDF = extension de fpdf):

 http://jc-cornic.developpez.com/tutoriels/php/Doc-phpToPDF/

BeOtic
BeOtic 187
PDF pour AcrobatReader
 Extension de la classe FPDF

BeOtic
BeOtic 188
PDF pour AcrobatReader
 Autres librairies.

 htmlToPDF : librairie qui transforme du HTML en PDF.

BeOtic
BeOtic 189
Travaux Pratiques

TP 7
PDF

BeOtic
BeOtic 190
Programme de la formation
 Introduction

 Programmation Orientée Objet (POO)

 Gestion des erreurs

 Authentification LDAP

 Bases de données : manipulations avancées

 XML/DOM/XSLT

 Web Services et SOAP

 PDF pour AcrobatReader

 E-mail

BeOtic
BeOtic 191
E-mail
 MIME : pièces jointes et format HTML.

 Les formats Mixed, Multipart, Alternative/Related.

 Les encodages particuliers.

 Paramétrage d’un serveur de test.

BeOtic
BeOtic 192
E-mail
 MIME : pièces jointes et format HTML.

 Les formats Mixed, Multipart, Alternative/Related.

 Les encodages particuliers.

 Paramétrage d’un serveur de test.

BeOtic
BeOtic 193
E-mail
 MIME : pièces jointes et format HTML.

 L’entête « Content-Type » permet de spécifier le type de contenu du mail :

 text/html : Indique que le contenu du mail sera au format html.

 image/jpeg : Indique que le contenu du mail sera une image au format


jpeg.

 text/plain : Indique que le contenu du mail sera au format texte.

…

BeOtic
BeOtic 194
E-mail
 MIME : pièces jointes et format HTML.
 Exemple d’envoi de mail au format HTML

Définition du type de contenu du mail, ici ce


sera du texte au format HTML

Définition du contenu du mail au format


HTML

Envoi du mail

BeOtic
BeOtic 195
E-mail
 MIME : pièces jointes et format HTML.
 Exemple d’envoi de mail avec pièce jointe

Définition du type de contenu du mail, ici ce


sera un fichier pdf

Ajout dans le corps du mail du source de


l’image encodé au format « base64 » (pour
permettre aux informations binaires d'être
manipulées par les systèmes qui ne gèrent
pas correctement les 8 bits)
chunk_split : scinde une chaîne pour
respecter la norme RFC 2045

BeOtic
BeOtic 196
E-mail
 MIME : pièces jointes et format HTML.

 Les formats Mixed, Multipart, Alternative/Related.

 Les encodages particuliers.

 Paramétrage d’un serveur de test.

BeOtic
BeOtic 197
E-mail
 Les formats Mixed, Multipart, Alternative/Related.

 Multipart/Mixed : Spécifie que le mail contiendra des parties de type MIME


différentes (texte, html, pièces jointes différentes). La propriété « boundary »
de l’entête « Content-type » spécifie la chaîne qui servira de frontière entre
chaque partie.
Double tirets
important
Entête

Ligne vide
importante

Contenu

BeOtic
BeOtic 198
E-mail
 Les formats Mixed, Multipart, Alternative/Related.

 Multipart/Alternative : Permet d’indiquer que chaque partie du mail est la


même mais de format différent. On l’utilise pour permettre aux clients mail
ne supportant pas le format html de pouvoir afficher le contenu au format
texte de façon lisible.

Format HTML

Format texte

BeOtic
BeOtic 199
E-mail
 Les formats Mixed, Multipart, Alternative/Related.

 Multipart/Related : Permet d’indiquer que le mail contiendra différentes


parties liées entre elles. La première fera référence aux autres. Exemple :

Image incluse et insérée dans le


tableau via un lien

Lien de référence à
l’image

Source de l’image
encodé en base64

BeOtic
BeOtic 200
E-mail
 MIME : pièces jointes et format HTML.

 Les formats Mixed, Multipart, Alternative/Related.

 Les encodages particuliers.

 Paramétrage d’un serveur de test.

BeOtic
BeOtic 201
E-mail
 Les encodages particuliers.

 La propriété « charset » de l’entête « Content-type » permet de définir


l’encodage du mail (exemple : charset=‘ISO-8859-1’). Deux des plus connus :

 ISO-8859-1 : Code des caractères latin (Européens).

 UTF-8 : International.

 Cette propriété indique au logiciel client mail quel jeu de caractères il doit
utiliser pour afficher le mail.

BeOtic
BeOtic 202
E-mail
 MIME : pièces jointes et format HTML.

 Les formats Mixed, Multipart, Alternative/Related.

 Les encodages particuliers.

 Paramétrage d’un serveur de test.

BeOtic
BeOtic 203
E-mail
 Paramétrage d’un serveur de test.

 Paramétrage du php.ini pour que php puisse envoyer des mails

 Configuration Windows :

• smtp : L’adresse du serveur smtp à utiliser pour envoyer les


mails (exemple : smtp.free.fr).

• smtp_port : Le port du serveur smtp.

• sendmail_from : Email utilisé par défaut pour définir l’entête


« From : » du mail.

• Configuration Linux :

• sendmail_path : Chemin d’accès à la commande sendmail


(exemple : /var/bin/sendmail) ; par défaut elle prend la valeur :
sendmail -t -i.

BeOtic
BeOtic 204
PHP 5.4
 Améliorations

 Accès à l’index d’un tableau directement en sortie de fonction, ex:


maFonction()[0];

 Déclaration de tableau possible via le [] au lieu de array()

 Support du $this par les fonctions anonymes

 Accès aux attributs de classe directement en sortie du constructeur

 Notion de trait (palliatif à l’héritage) : trait class1 {public function


fonction1()…}, dans la déclaration d’une classe utilisation de : use class1,
ainsi héritage des fonctions de la class1

BeOtic
BeOtic 205
Travaux Pratiques

TP 8
Mail

BeOtic
BeOtic 206
Annexes

BeOtic
BeOtic 207
Annexe 1

BeOtic
BeOtic 208
Installation wsdl editor

 Help > Install New Software…

 Cliquer sur « Available Software Sites »

 Sélectionner l’adresse terminant par « juno »

 Dans la liste « Work with : » sélectionner l’adresse terminant par « juno »

 Dans la partie en dessous « Web, XML, Java EE… » > « Eclipse Java Web
Developer Tools »

 Cliquer sur « Finish »

BeOtic
BeOtic 209

Vous aimerez peut-être aussi