Développement Web PHP Avancé



Documents pareils
TP1. Outils Java Eléments de correction

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmer en JAVA. par Tama

Architecture Orientée Service, JSON et API REST

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

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Gestion Electronique de Document (ECM/GED)

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

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Présentation du langage et premières fonctions

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

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Introduction au langage C

Java Licence Professionnelle CISII,

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

as Architecture des Systèmes d Information

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Algorithmique et Programmation, IMA

Génie Logiciel avec Ada. 4 février 2013

Alfstore workflow framework Spécification technique

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

TP1 : Initiation à Java et Eclipse

Serveur d Applications Web : WebObjects

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Plan du cours. Historique du langage Nouveautés de Java 7

Certificat Big Data - Master MAthématiques

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

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

Programmation en Java IUT GEII (MC-II1) 1

Cours de Programmation 2

Analyse de sécurité de logiciels système par typage statique

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Auto-évaluation Programmation en Java

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

Programmation Web. Madalina Croitoru IUT Montpellier

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Manipulation 4 : Application de «Change».

4. Groupement d objets

LOG4430 : Architecture logicielle et conception avancée

Projet de programmation (IK3) : TP n 1 Correction

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

RMI le langage Java XII-1 JMF


AWS avancé. Surveiller votre utilisation d EC2

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

ECLIPSE ET PDT (Php development tools)

Machines virtuelles fonctionnelles (suite) Compilation ML Java

PHP 5.4 Développez un site web dynamique et interactif

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Création d objet imbriqué sous PowerShell.

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

L informatique en BCPST

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

Présentation du PL/SQL

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

TP 1. Prise en main du langage Python

Compilation (INF 564)

Les chaînes de caractères

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Web Tier : déploiement de servlets

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

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

4. SERVICES WEB REST 46

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

Programmation système I Les entrées/sorties

Bases de programmation. Cours 5. Structurer les données

Classes et Objets en Ocaml.

Langage Java. Classe de première SI

Corrigé des exercices sur les références

2 Formation utilisateur

DOM - Document Object Model

ACTIVITÉ DE PROGRAMMATION

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

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

PHP 5. La base de données MySql. A. Belaïd 1

Flex. Lire les données de manière contrôlée. Programmation Flex 4 Aurélien VANNIEUWENHUYZE

STAGE IREM 0- Premiers pas en Python

Initiation à la programmation en Python

Module http MMS AllMySMS.com Manuel d intégration

Environnements de développement (intégrés)

Remote Method Invocation (RMI)

Introduction à MATLAB R

Tp 1 correction. Structures de données (IF2)

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Document Object Model (DOM)

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Django et PostgreSQL sous la charge

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

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Introduction à la Programmation Parallèle: MPI

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Architectures Web Services RESTful

Transcription:

1 / 73 Développement Web PHP Avancé Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer 2008

2 / 73 Objectif Objectif du cours Entrevoir des fonctionnalités avancées de PHP ainsi que frameworks conventions de codage documentation SPL gestion des fichiers

3 / 73 Plan Plan 1 Frameworks 2 Conventions de codage 3 SPL 4 Gestion des fichiers

4 / 73 Frameworks Frameworks Frameworks et PHP

5 / 73 Frameworks PEAR - PHP Extension and Application Repository Definition (PEAR http://pear.php.net/) La mission de PEAR est de fournir : une librairie structurée de code source libre pour les utilisateurs de PHP un système de distribution du code source et de maintenance des paquets. un style de codage pour les programmes écrit en PHP une bibliothèque d extensions de PHP (PECL - PHP Extension Code Library), un site Web, des listes de diffusion et des sites mirroirs pour supporter la communauté PHP/PEAR

6 / 73 Frameworks PECL - PHP Extension Code Library Definition (PECL http://pecl.php.net/) PECL est un projet distinct de PEAR pour distribuer les extensions de PHP (code écrit en C et compilé, telle que l extention PDO). les extensions PECL sont aussi distribuées en paquets et peuvent être installées avec l installeur de PEAR.

7 / 73 Frameworks Zend Framework Definition (Zend http://framework.zend.com/) Le framework Zend (ZF) est un framework open source, orienté objet de PHP 5 axé sur le développement de sites web. Il repose notamment sur une implantation MVC.

8 / 73 Frameworks Zend Framework Definition (Zend http://framework.zend.com/) Le framework Zend (ZF) est un framework open source, orienté objet de PHP 5 axé sur le développement de sites web. Il repose notamment sur une implantation MVC. Definition (framework) un framework est un espace de travail modulaire : ensemble de bibliothèques, d outils et de conventions permettant le développement d applications (on traduit par cadre d applications ou cadriciel)

9 / 73 Frameworks Zend Framework Pour info (wikipedia) Les fondateurs de Zend Technologies, Zeev Suraski et Andi Gutmans, ont commencé à travailler sur PHP en 1997 lorsqu ils ont créé une nouvelle implémentation de PHP, basée sur son prédécesseur PHP2/FI, créé par Rasmus Lerdorf. Cette implémentation a donné naissance à PHP3, qui a révolutionné le monde PHP et jeté les bases de ce qu allait devenir le langage tel qu il est connu en 2008. En 1999, ils ont grandement amélioré le moteur de script de PHP4 nommé Zend Engine. Note : Zend Studio

10 / 73 Frameworks Autres Frameworks Wikipedia Wikipedia donne une liste assez importante de framework PHP : http://fr.wikipedia.org/wiki/liste_de_frameworks_php

11 / 73 Conventions de codage Conventions de codage Conventions de codage

12 / 73 Conventions de codage Conventions de codage Definition (Conventions de codage) Elles servent à mettre en place des normes de manière à ce qu un programmeur puisse relire et comprendre facilement le code produit par d autres programmeurs. certaines conventions sont dictées par le langage d autres sont établies par les programmeurs et concernent : le nommage des variables et fonctions la dispositions des blocs (if-then-else, while,...) le nommage des paramètres,...

13 / 73 Conventions de codage nommage des variables et fonctions Conventions à appliquer les noms doivent être courts et explicites les noms de variables et fonctions ne contiennent que des lettres minuscules et le symbole souligné un nom de variable est mis au pluriel s il contient plusieurs éléments une méthode qui retourne un attribut d une classe doit commencer par get une méthode qui fixe un attribut d une classe doit commencer par set

14 / 73 Conventions de codage Disposition des blocs On utilisera préférentiellement la syntaxe : Disposition des blocs 1 function divise($a, $b) { 2 if ($b==0) { 3 throw new exception("zero") ; 4 } else { 5 return $a/$b ; 6 } 7 }

15 / 73 Conventions de codage Autres conventions on supprime le plus possible les espaces inutiles on déclare les variables au moment où on les utilise on sort des boucles les calculs inutiles ou redondants (refactoring) on documente les fonctions, méthodes et variables / attributs

16 / 73 Conventions de codage Exemple Convention en application 1 function moyenne($arr notes) { 2 $nbr=count($arr notes) ; 3 $somme=0 ; 4 for ($i=0 ;$i<$nbr ;++$i) { 5 $somme+=$arr notes[$i] ; 6 } 7 return $somme/$nbr ; 8 }

17 / 73 Conventions de codage Documentation A quoi sert la documentation du code? Elle a pour but d expliquer au programmeur qui ne connait pas le code : ce que contiennent les variables ce que font les fonctions (rôle, comportement, paramètres en entrée / sortie, valeur de retour)

18 / 73 Conventions de codage Documentation A quoi sert la documentation du code? Elle a pour but d expliquer au programmeur qui ne connait pas le code : ce que contiennent les variables ce que font les fonctions (rôle, comportement, paramètres en entrée / sortie, valeur de retour) PHP + Doc C est d autant plus important en PHP étant donné l absence de typage et la non distinction entre procédure et fonction.

Conventions de codage Documentation et commentaires Commentaires Il existe trois types de commentaires // commentaire sur une ligne /* commentaire sur plusieurs lignes */ /** commentaire pour documentation */ 19 / 73

Conventions de codage Documentation et commentaires Commentaires Il existe trois types de commentaires // commentaire sur une ligne /* commentaire sur plusieurs lignes */ /** commentaire pour documentation */ A noter il ne faut pas mettre de ligne blanche entre le commentaire de documentation et la variable ou la fonction à laquelle il se rapporte. 20 / 73

21 / 73 Conventions de codage Format des commentaires (1/2) tags généralistes On peut introduire des tag (mots-clés) au sein des commentaires pour la documentation qui seront ensuite utilisés pour générer la documentation au format html : @author Author Name nom de l auteur @copyright Copyright Information @deprecated [version information] @license url [license] @link url [description] @version description

Conventions de codage Format des commentaires (2/2) autres tags @param datatype $variablename description @return datatype description @see reference @todo description @var datatype variables de classes 22 / 73

23 / 73 Conventions de codage Commentaire des classes Commentaires des classes 1 /** 2 * classe utilisée pour représenter une personne 3 * une personne est définie par son nom sous forme de 4 * chaîne de caractère 5 */ 6 class Personne { 7 /** 8 * nom de la persone 9 */ 10 protected $nom ; 11 }

24 / 73 Conventions de codage Commentaire des fonctions Commentaires des fonctions 1 /** 2 * calcul de la moyenne 3 * on calcule la moyenne d un ensemble de notes donnée 4 * 5 * @param array $arr notes tableau de notes entières 6 * @return float moyenne des notes 7 */ 8 function moyenne($arr notes) { 9 $nbr=count($arr notes) ; 10 $somme=0 ; 11 // parcours séquentiel du tableau suivant la clé entière 12 for ($i=0 ;$i<$nbr ;++$i) { 13 $somme+=$arr notes[$i] ; 14 } 15 return $somme/$nbr ; 16 }

25 / 73 Conventions de codage Générer la documentation PHPDoc phpdoc permet de générer de la documentation à partir de fichiers sources PHP (comme on le ferait avec doxygen).

Conventions de codage Générer la documentation PHPDoc phpdoc permet de générer de la documentation à partir de fichiers sources PHP (comme on le ferait avec doxygen). Installer phpdoc sudo pear install channel ://pear.php.net/phpdoc-0.1.0 26 / 73

Conventions de codage Générer la documentation PHPDoc phpdoc permet de générer de la documentation à partir de fichiers sources PHP (comme on le ferait avec doxygen). Installer phpdoc sudo pear install channel ://pear.php.net/phpdoc-0.1.0 Générer la documentation phpdoc -s srcdir -d docdir 27 / 73

28 / 73 Conventions de codage PEAR Conventions PEAR Coding Conventions Les conventions de codage et commentaires de PEAR sont disponibles à l adresse suivante : http://pear.php.net/manual/en/standards.php

29 / 73 SPL SPL Standard PHP Library

30 / 73 SPL Introduction à la SPL Definition (Standard PHP Library) Il s agit d un ensemble de classes et d interfaces sensées apporter à PHP un comportement Orienté Objet dans le cadre de la programmation. Elle repose sur des itérateurs gestion des répertoires et fichiers support XML gestion des tableaux sous forme de classe définition d exceptions

31 / 73 SPL SPL Classe et Interfaces Classes et interfaces Pour connaître les classes et interfaces implantées par la SPL : 1 print r(spl classes()) ;

32 / 73 SPL Définition d un itérateur Definition (Itérateur) Un itérateur est généralement une classe dont la fonction est de parcourir une autre classe stockant des objets (ex : tableau, liste, pile, file, dictionnaire,...) A noter Tous les itérateurs héritent de l interface abstraite Traversable

33 / 73 SPL L interface iterator (1/2) Interface iterator 1 interface Iterator implements Traversable { 2 public function current() ; 3 public function key() ; 4 public function next() ; 5 public function rewind() ; 6 public function valid() ; 7 }

34 / 73 SPL L interface iterator (2/2) Description des méthodes current valeur de l élément courant key clé de l élément courant next passe à l élément suivant rewind retourne au début valid vrai si on est pas à la fin

35 / 73 SPL Fonctions agissant sur les itérateurs iterator to array(iterator) convertion d un itérateur en tableau iterator count(iterator) compte le nombre d éléments iterator apply(iterator,callback) applique une fonction sur chaque élément de l itérateur

36 / 73 SPL Exemple Exemple avec des itérateurs 1 $tableau=array(1,2,3) ; 2 $iterator=new ArrayIterator($tableau) ; 3 echo "il y a ". iterator count($iterator) 4." elements\n" ; 5 print r(iterator to array($iterator)) ; 6 print r($iterator) ;

37 / 73 SPL Exemple et résultat Exemple avec des itérateurs il y a 3 elements Array ( [0] => 1 [1] => 2 [2] => 3 ) ArrayIterator Object ( [0] => 1 [1] => 2 [2] => 3 )

38 / 73 SPL Comportement d un tableau Interface ArrayAccess Elle permet de manipuler un objet sous forme de tableau Interface Countable Elle permet de connaître le nombre d éléments d une classe

39 / 73 SPL Interface ArrayAccess (1/2) Interface ArrayAccess 1 interface ArrayAccess { 2 public function offsetexists($offset); 3 public function offsetset($offset,$value) ; 4 public function offsetget($offset) ; 5 public function offsetunset($offset); 6 }

40 / 73 SPL L interface ArrayAccess (2/2) Description des méthodes offsetexists détermine si l indice existe offsetset attribue une valeur à l indice donné offsetget retourne la valeur à l indice donné offsetunset supprime la donnée à l indice donné

41 / 73 SPL Interface Countable Interface Countable 1 Interface Countable { 2 public function count() ; 3 }

42 / 73 SPL Interface IteratorAggregate Interface IteratorAggregate Elle permet à un objet container de fournir un iterator qui permettra de parcourir les objets qu il contient Interface IteratorAggregate 1 interface IteratorAggregate extends Traversable { 2 public function getiterator() ; 3 }

43 / 73 SPL Exemple d utilisation d IteratorAggregate IteratorAggregate 1 class MyContainer implements IteratorAggregate { 2 protected $tab ; 3 public function construct() { 4 $this->tab=array(1,2,3); 5 } 6 public function getiterator() { 7 return new ArrayIterator($this->tab); 8 } 9 } 10 foreach(new MyContainer() as $value) { 11 echo $value."\n" ; 12 }

44 / 73 SPL La classe ArrayIterator class ArrayIterator(array) Elle permet de générer un itérateur sur un tableau PHP class ArrayIterator 1 $tableau=range(1,10) ; 2 $iterator=new ArrayIterator($tableau) ; 3 foreach ($iterator as $val) { 4 echo $val."\n" ; 5 }

45 / 73 SPL La classe LimitIterator class LimitIterator(iterator,index,length) Elle permet de générer un itérateur sur un tableau PHP dont on fixe la plage de valeurs class LimitIterator 1 $tableau=range( c, r ) ; 2 $iterator=new ArrayIterator($tableau) ; 3 $limit=new LimitIterator($iterator,3,2); 4 // donne f et g 5 foreach ($limit as $val) { 6 echo $val."\n" ; 7 }

46 / 73 SPL La classe AppendIterator class AppendIterator() Elle permet de générer un itérateur sur plusieurs tableaux class AppendIterator 1 $it1=new ArrayIterator(range(1,5)); 2 $it2=new ArrayIterator(range(10,15)); 3 $appiterator=new AppendIterator() ; 4 $appiterator->append($it1) ; 5 $appiterator->append($it2) ; 6 // 1 2 3 4 5 10 11 12 13 14 15 7 foreach ($appiterator as $value) { 8 echo $value." " ; 9 }

47 / 73 SPL La classe FilterIterator class FilterIterator(iterator) Elle permet de filtrer les valeurs en redéfinissant la méthode accept class FilterIterator 1 class PlusGrandQue12 extends FilterIterator { 2 public function accept() { 3 return ($this->current() > 12) ; 4 } 5 } 6 $iterator=new ArrayIterator(range(1,15)) ; 7 $filter=new PlusGrandQue12($iterator); 8 print r(iterator to array($filter)) ;

48 / 73 SPL La classe RegexIterator class RegexIterator(iterator,expreg) Elle permet de filtrer les valeurs en utilisant une expression régulière class RegexIterator 1 $tableau=array( pomme, abricot, 2 poire, banane, pomelos ) ; 3 $iterator=new ArrayIterator($tableau); 4 $regiterator=new RegexIterator($iterator, /ˆpo/ ) ; 5 // [0] => pomme [2] => poire [4] => pomelos 6 print r(iterator to array($regiterator)) ;

49 / 73 SPL La classe IteratorIterator class IteratorIterator(variable) Elle permet de créer un iterateur sur les classes qui implantent uniquement l interface Traversable. On l utilise notamment avec PDO. class IteratorIterator 1 $pdostatement=$db->query( SELECT * FROM table ) ; 2 $iterator=new IteratorIterator($pdoStatement); 3 $limit=new LimitIterator($iterator,0,10); 4 print r(iterator to array($limit)) ;

50 / 73 SPL Autres itérateurs Autres itérateurs Il existe de nombreux autres itérateurs : CachingIterator SeekableIterator NoRewindIterator EmptyIterator InfiniteIterator RecursiveArrayIterator RecursiveIteratorIterator

51 / 73 SPL Implantation directe : SimpleXMLIterator (1/3) On dispose de la classe SimpleXMLIterator pour parcourir les fichiers XML. <bibliotheque> <livre> <titre>php pour les mules</titre> <auteur>guy Bouricot</auteur> </livre> <livre> <titre>le grand livre d HTML</titre> <auteur>jean Sans Peur</auteur> </livre> </bibliotheque>

52 / 73 SPL Implantation directe : SimpleXMLIterator (2/3) Lecture d un fichier XML 1 $bibliotheque=new SimpleXMLIterator(file get contents( bibliotheque.xml )); 2 var dump($bibliotheque) ; 3 foreach($bibliotheque as $livre) { 4 echo "$cle \n" ; 5 if ($livre->haschildren()) { 6 foreach($livre->getchildren() as $tag=>$valeur) { 7 echo "\t $tag : $valeur\n" ; 8 } 9 } 10 }

53 / 73 SPL Implantation directe : SimpleXMLIterator (2/3) Lecture d un fichier XML 1 $bibliotheque=new SimpleXMLIterator(file get contents( bibliotheque.xml )); 2 var dump($bibliotheque) ; 3 foreach($bibliotheque as $livre) { 4 echo "$cle \n" ; 5 if ($livre->haschildren()) { 6 foreach($livre->getchildren() as $tag=>$valeur) { 7 echo "\t $tag : $valeur\n" ; 8 } 9 } 10 } Résultat titre : PHP pour les mules auteur : Guy Bouricot titre : Le grand livre HTML auteur : Jean Sans Peur

54 / 73 SPL La classe ArrayObject (1/2) ArrayObject Elle permet de gérer un tableau (array) sous forme objet. ArrayObject 1 class ArrayObject implements 2 IteratorAggregate, Traversable, 3 ArrayAccess, Countable { 4 }

55 / 73 SPL La classe ArrayObject (2/2) ArrayObject 1 $tableau=range(2,5) ; 2 $object=new ArrayObject($tableau) ; 3 $object->append( hello ); 4 $object[2]= a ; 5 $object[ color ]= red ; 6 print r($object->getiterator()) ; Résultat ArrayIterator Object ( [0] => 2 [1] => 3 [2] => a [3] => 5 [4] => hello [color] => red )

SPL Serialisation Interface Serializable Elle permet de transmettre des objets entre pages web et elle est définie car les attributs privés des classes ne sont pas sérialisables. Interface Serializable 1 interface Serializable { 2 public function serialize() ; 3 public function unserialize($serialized) ; 4 } 56 / 73

57 / 73 SPL Exemple Serialisation (1/2) classe de base 1 class Base implements Serializable { 2 private $base var ; 3 public construct() { 4 $this->base var= hello ; 5 } 6 public function serialize() { 7 return serialize($this->base var) ; 8 } 9 public function unserialize($serialized) { 10 $this->base var=unserialize($serialized) ; 11 } 12 }

58 / 73 SPL Exemple Serialisation (2/2) sous classe 1 class SubClass extends Base { 2 private $sub var ; 3 public construct() { 4 parent:: construct() ; 5 $this->sub var= world ; 6 } 7 public function serialize() { 8 $base=parent::serialize(); 9 return serialize(array($this->sub var,$base)) ; 10 } 11 public function unserialize($serialized) { 12 $data=unserialize($serialized); 13 $this->sub var=$data[0]; 14 parent::unserialize($data[1]); 15 } 16 }

59 / 73 SPL Exceptions SPL (1/2) Exceptions SPL La SPL définit plusieurs exceptions d un point de vue sémantique : LogicException émise si une expression logique est invalide LengthException émise si une taille est invalide DomainException émise si une valeurs n est pas du domaine OutOfBoundsException émise si une valeurs est invalide

60 / 73 SPL Exceptions SPL (2/2) Exceptions SPL (suite) La SPL définit plusieurs exceptions d un point de vue sémantique : OutofRangeException émise si une valeur est en dehors de l intervalle OverflowException émise si une valeur est trop grande UnderflowException émise si une valeurs est trop petite InvalidArgumentException émise si un argument est invalide

61 / 73 Gestion des fichiers Gestion des fichiers Les Fichiers

62 / 73 Gestion des fichiers Gestion des fichiers Lecture / Ecriture On dispose de fonctionnalités avancées pour la lecture et l écriture des fichiers, notamment grâce à : SPL avec la classe SPLFileInfo file get contents file put contents

63 / 73 Gestion des fichiers Lecture du contenu file get contents(filename, [flags,...]) Lit le contenu d un fichier en totalité et le retourne dans une chaîne. Les paramètres de la fonction sont les suivants : filename nom du fichier flags : FILE USE INCLUDE PATH, FILE TEXT context à NULL pour les fichiers offset position de début de lecture maxlen nombre d octets à lire, si non spécifié lecture en totalité On retourne FALSE en cas d erreur

64 / 73 Gestion des fichiers Exemple Lecture 1 Lecture d un fichier 1 // compatibilité PHP 4 2 $filename= file get contents1.php ; 3 if (!function exists( file get contents )) { 4 echo "without file get contents\n" ; 5 $file=@fopen($filename, r ) ; 6 $string=fread($file,filesize($filename)) ; 7 @fclose($file) ; 8 } else { 9 echo "with file get contents\n" ; 10 $string=file get contents($filename) ; 11 } 12 if ($string===false) { 13 throw excetion( could not read ) ; 14 } else { 15 echo $string ; 16 }

65 / 73 Gestion des fichiers Exemple Lecture 2 Lecture d une page web 1 $ctx=stream context create(array( 2 http => array( 3 timeout => 1 4 ) 5 ) 6 ) ; 7 $file=file get contents("http ://www.info.univ-angers.fr/index.php", 0, $ctx) ; 8 echo $file ;

66 / 73 Gestion des fichiers Ecriture du contenu file put contents(filename, data [,flags,...]) Ecrit dans un fichier la donnée data. Les paramètres de la fonction sont les suivants : filename nom du fichier data chaine, tableau ou ressource de flux flags : FILE USE INCLUDE PATH, FILE TEXT, FILE APPEND, FILE BINARY context à NULL pour les fichiers On retourne FALSE en cas d erreur

67 / 73 Gestion des fichiers Exemple Ecriture 1 Ecriture dans un fichier 1 $tableau=array( hello, world, 2009) ; 2 // stocke la chaine hello world 2009 dans le fichier log.txt 3 file put contents( log.txt,implode(,$tableau)."\n");

68 / 73 Gestion des fichiers Exemple Ecriture 2 Remplace les balises <livre>... </livre> par <book>... </book> Ecriture dans un fichier 1 $string=file get contents( test.xml ); 2 $string=preg replace("/<(\/?)livre>/","<\\1book>",$string); 3 file put contents( test en.xml,$string) ;

69 / 73 Gestion des fichiers Exemple Ecriture 1 Remplace les balises <livre>... </livre> par <book>... </book> Ecriture dans un fichier 1 $string=file get contents( test.xml ); 2 $string=preg replace("/<(\/?)livre>/","<\\1book>",$string); 3 file put contents( test en.xml,$string) ;

70 / 73 Gestion des fichiers Parcours des répertoires à la manière de PHP on utilise la fonction opendir pour ouvrir un répertoire puis readdir pour itérer sur les fichiers

71 / 73 Gestion des fichiers Parcours des répertoires Parcours PHP 1 $dir = "./" ; 2 if (is dir($dir)) { 3 if ($dh = opendir($dir)) { 4 while (($file = readdir($dh))!== false) { 5 echo "fichier : $file : type : ". filetype($dir. $file). "\n" ; 6 } 7 closedir($dh) ; 8 } 9 }

72 / 73 Gestion des fichiers Parcours des répertoires Parcours SPL 1 try { 2 foreach (new DirectoryIterator(./ ) as $item) { 3 echo $item."\n" ; 4 } 5 } catch(exception $e) { 6 echo "No files Found!\n" ; 7 }

73 / 73 Gestion des fichiers Fin Fin