PHP 7 avancé
Pascal Martin
Julien Pauli
Cyril Pierre De Geyer
Éric Daspet
Eyrolles
Chapitre 1
Qu'est-ce que PHP ?1
Introduction à PHP
2
Un langage open source2
Licence et téléchargement
2
Exécution
2
Courbe d'apprentissage, l'essor des frameworks
3
Que faire avec PHP ?3
Fonctionnement couplé à un serveur web
3
Applications en lignes de commandes
3
Interactions avec d'autres langages via JSON ou XML
3
Services web, API et microservices
4
Particularités de PHP4
De nombreux connecteurs techniques
4
Les performances de PHP
5
Les bases de données reconnues par PHP
5
Services web et interopérabilité
5
Bibliothèques externes
6
La portabilité
6
Coûts de licence
6
Coûts de développement
6
Le code source
7
Dynamisme de la communauté PHP
7
Limites de PHP
7
Historique7
PHP/FI
7
PHP 3
8
PHP 4
9
PHP 5
9
PHP 6 : une version qui n'a pas vu le jour
9
PHP 7
10
Mode de développement du projet PHP10
Les différentes équipes
10
Cycle de développement du projet PHP
12
Les versions majeures12
Les versions mineures13
Les versions de révision13
Les autres types de version14
Les versions release candidate (RC)
14
Les versions de développement (dev)
14
Les guides de migration et le calendrier15
Principaux apports de PHP 7
15
Nouvelle version du Zend Engine15
Opérateur « spaceship »16
Gestion des erreurs16
Typage scalaire16
Architecture et fonctionnement
16
Architecture technique16
Fonctionnement de PHP17
La machine virtuelle de PHP
18
PHP en France et dans le monde
19
La communauté française19
Les ressources d'aide20
Le site officiel de PHP
20
L'AFUP
22
PHPFrance.com
22
Planete-php.fr
23
PHP, the right way
23
DrupalFr
24
Afsy
24
Développez.com
25
MySQL.com
25
Chapitre 2
Installer et configurer27
Différents types d'utilisations
27
Le serveur web de test intégré28
Utilisation simple du serveur web intégré
28
Options avancées du serveur web intégré
29
Installer PHP sous Microsoft Windows
31
Installation automatique31
Installation manuelle32
Installation de PHP
32
Installation d'Apache
34
Installation de MySQL/MariaDB
37
Installer PHP sous Linux
38
Installation automatisée38
Installation manuelle de PHP39
Extensions additionnelles PECL40
Aller plus loin dans le mode CGI, avec FPM40
Utiliser PHP FPM
40
Installation et compilation
40
Gestion de la configuration
41
Installer PHP sur Mac
41
Configuration de PHP avec php.ini
41
Utilisation des extensions42
Répertoires contenant les extensions
42
Activation d'une extension
42
Les directives de configuration43
Balises d'ouverture
43
Compression des pages
44
Limitation d'accès aux répertoires
44
Gestion des ressources
44
Gestion des erreurs
45
Gestion des chemins
46
Gestion des fichiers téléchargés
46
Gestion des sessions
47
Inclusion de fichier automatique
47
Gestion de la configuration47
Modification de configuration dans un script
48
Modification de configuration via Apache
49
Modification de configuration via FPM
50
Localisation de php.ini et utilisation de plusieurs fichiers de configuration
50
La gestion de dépenses
52
Généralité sur Composer53
Utilisation de Composer
54
Installer et mettre à jour ses dépendances56
Installer les dépendances
56
Mettre à jour une dépendance
56
Chapitre 3
Les structures de base57
Insertion de PHP dans HTML
57
Balises d'ouverture et de fermeture58
Balise d'affichage rapide
58
Les commentaires58
Commentaire en annotation
59
Enchaînement des instructions60
Erreur courante
60
Structure du document61
Affichage et envoi de code HTML
62
Exécuter du code PHP62
Via un serveur web
62
En ligne de commandes
63
Exécution en programme autonome
63
Constantes et variables
64
Variables64
Syntaxe des variables
64
Déclaration et types
64
Portée des variables
65
Test d'existence
67
Destruction de variable
68
Variables dynamiques
68
Constantes69
Types de données
70
Booléens (boolean)71
Les nombres entiers (integer)71
Les nombres flottants (double, float)71
Les chaînes de caractères (string)72
Interprétation des variables
72
Le caractère d'échappement (ou protection)
73
Délimitation par apostrophes
74
Syntaxe Heredoc
75
Syntaxe Nowdoc
76
Accéder à un caractère d'une chaîne
76
Les tableaux (array)77
Tableaux indexés numériquement
77
Tableaux associatifs
78
Tableaux multidimensionnels
80
Transtypage81
Règles de conversion
81
Forcer une conversion
83
Chapitre 4
Traitements de base85
Les opérateurs
85
Opérateurs d'affectation85
Affectation par copie et références
86
Opérateurs arithmétiques87
L'utilité du modulo (%)
88
Incrémentation
89
Opérateurs combinés89
La concaténation90
Opérateurs de comparaison90
L'opérateur (...)
91
Opérateurs logiques92
Opérateurs sur les bits92
Opérateur ternaire93
Opérateur de nullité94
Priorités entre opérateurs94
Structures de contrôle
95
Les conditions95
L'instruction if
95
La clause else
96
L'instruction elseif
97
Les accolades dans les conditions
98
L'instruction switch
99
Les boucles100
L'instruction while
100
L'instruction for
101
L'instruction foreach
102
Les instructions d'arrêt105
Break
105
Continue
105
L'instruction goto106
Inclure des fichiers
107
Inclusions et balises PHP108
Différence entre require et include109
require_once et include_once109
Valeur de retour de require et include109
Chapitre 5
Les fonctions111
Les fonctions utilisateur
111
Déclaration d'une fonction112
Valeur par défaut
113
Valeur de retour
114
Appel de fonction114
Appel indirect
116
Visibilité des variables116
Portée des variables
117
Passage par valeur ou référence
118
Valeur de retour par référence
119
Retourner plusieurs valeurs119
Nombre de paramètres variables120
Typage des arguments et du retour122
Fonctions anonymes123
Fermetures lexicales
123
Les fonctions internes
125
Informations de configuration125
Affichage de débogage126
Fonctions mathématiques127
Connaître les extrémités
127
Arrondir des valeurs
128
Créer des valeurs aléatoires
128
Travailler sur différentes bases mathématiques
129
Fonctions réseau130
Résolution DNS d'une adresse IP
130
Corrélation IP/DNS
130
Fonctions de chiffrement et de hachage132
Exécution de code132
Fonction appelée à l'arrêt du script
132
Exécution d'une chaîne de code PHP
133
Chapitre 6
Chaînes de caractères135
Un caractère, une chaîne
135
ASCII136
Unicode136
Fonctions d'affichage
137
Affichages simples137
Affichages avec masques137
Des masques pour gérer plusieurs langues
137
Syntaxe des masques de printf et assimilés
138
Fonctions assimilées à printf
139
Informations sur une chaîne
140
Accéder à un caractère précis140
Valeur ASCII d'un caractère140
Taille d'une chaîne141
Lister les mots d'une chaîne141
Position d'une sous-chaîne143
Présence de certains caractères144
Conversions et formatages
144
Protections et échappements144
Protections classiques
144
Protection pour bases de données
145
Protections pour HTML
145
Conventions d'affichage locales148
Manipulations de chaînes
149
Recherche d'une sous-chaîne149
Récupérer une sous-chaîne149
Remplacer un motif150
Fonctions d'élagage151
Remplissage151
Changement de casse152
Coupure de paragraphes153
Chaînes de caractères binaires
154
Chaînes de caractères multi-octets et jeux de caractères
155
L'extension iconv155
L'extension mbstring156
Installation et configuration
157
Utilisation
157
L'extension intl pour transformer, comparer, trier et normaliser158
Installation
158
Utilisation
159
Chapitre 7
Les expressions rationnelles163
Syntaxe
163
Protections et échappements164
Délimitation et présentation165
Syntaxe générale d'une expression
165
Les délimiteurs
165
Chaîne de recherche simple165
Construction d'expression166
Choix entre plusieurs chaînes de caractères
166
Liste de caractères autorisés
167
Liste de caractères interdits
167
Classes de caractères prédéfinies
168
Codes spéciaux prédéfinis
168
Gestion des occurrences multiples169
Nombre d'occurrences fixe
169
Nombre d'occurrences délimité
169
Nombre d'occurrences semi-délimité
170
Syntaxe réduite
170
Capture gloutonne ou non gloutonne
170
Répétition de sous-chaînes
170
Assertions171
Imposer les premiers et derniers caractères
171
Délimitation des lignes
172
Délimitation des mots
172
Assertion sur la suite
172
Assertion sur ce qui précède
173
Captures173
Réaliser une capture
173
Empêcher une capture
173
Utiliser le résultat d'une capture
173
Exemples d'utilisation des captures
174
Modificateurs174
Modificateurs locaux
174
Les fonctions
175
Chercher une correspondance175
Récupérer des sous-chaînes
175
Rechercher à partir d'une certaine position
175
Rechercher sur plusieurs sources
176
Rechercher toutes les occurrences
176
Effectuer des remplacements177
Réutilisation des chaînes capturées
178
Limitation des remplacements
178
Rechercher sur plusieurs textes
179
Rechercher plusieurs motifs
179
Effectuer plusieurs remplacements
179
Utiliser des fonctions de rappel
180
Échappement et protections180
Performances des expressions rationnelles
180
Fonctionnement du moteur181
Stratégies181
Boucles infinies182
Chapitre 8
Utilisation des tableaux183
Déclaration et initialisation d'un tableau
183
Remplir avec des valeurs consécutives185
Déboguer un tableau
185
Taille d'un tableau
185
Tester l'existence et le type d'un tableau
187
Recherche d'un élément
187
Présence dans le tableau187
Recherche de la clé correspondante188
Nombre d'occurrences d'un élément189
Récupération aléatoire d'éléments189
Trier les tableaux
190
Tri par valeur190
Tri en ordre inverse190
Garder les associations clé-valeur191
Tri par clé191
Tri naturel192
Trier avec une fonction utilisateur192
Tri multicritère193
Extractions et remplacement
194
Affecter automatiquement des variables à partir des données d'un tableau194
Conversion tableau (...) chaînes195
Extraction d'un sous-tableau196
Remplacement d'un sous-tableau196
Extraction d'une colonne
197
Gestion des clés et des valeurs
198
Liste des clés utilisées198
Liste des valeurs utilisées198
Échanger les clés et les valeurs199
Fusions et séparations
199
Fusion de plusieurs tableaux199
Fusion récursive200
Séparation d'un tableau en plusieurs201
Différences et intersections
202
Comparaisons de tableaux202
Différences entre tableaux202
Intersections entre deux tableaux203
Gestion des doublons203
Gestion des piles et des files
203
Navigation dans les tableaux
204
Astuces avancées avec les tableaux
204
Gestion des index par PHP204
Conversion automatique des clés de tableau205
Tester un tableau205
Transtypage206
Opérations impossibles avec les tableaux207
Chapitre 9
Les formulaires209
Formulaires HTML
209
Caractères spéciaux et HTML
210
Création d'un formulaire
211
Déclaration d'un formulaire211
Méthode d'envoi du formulaire211
Méthode GET (transmission par URL)
211
Méthode POST
212
Quelle méthode utiliser ?
212
Envoi de fichiers213
Réception des données en PHP
213
Utilisation des variables superglobales213
Récupération d'une donnée simple214
Retours à la ligne et zones de texte214
Utilisation des cases à cocher215
Validation de données216
Valider les types simples avec ctype
216
Valider des données plus complexes avec Filter
217
Listes à sélections multiples223
Gestion des images cliquables224
Téléchargements (envoi) de fichiers224
Utilisation et traitement du fichier
225
Gérer les noms de fichiers
225
Détection d'erreurs
226
Formulaire dynamique et tableaux227
Autres problématiques
227
Gestion du temps227
Gestion de la taille des données228
Sécurité et données reçues228
Procédure de gestion des formulaires229
Chapitre 10
HTTP et interactions avec le client web231
Descriptif du contexte web
231
Client-serveur231
Aperçu de HTTP233
Requête et réponse
233
En-tête et contenu
234
Utiliser HTTP avec PHP
235
En utilisant les variables superglobales235
Nom du serveur
236
Racine du serveur
236
Autres informations sur le serveur
236
Adresses IP et port du client
236
Nom d'hôte
238
Adresse IP et port du serveur
238
Méthode d'accès invoquée
238
Serveur demandé
239
Protocole utilisé
239
L'adresse demandée (URL)
239
Chaînes de GET
239
Chemin d'accès
240
Page référente
240
Négociation de contenu
241
Nom et version du navigateur
241
Nom du script exécuté
242
Utiliser HTTP en accédant au flux brut242
Les différentes fonctions PHP relatives à HTTP243
Manipuler les en-têtes
244
Manipuler d'autres concepts de HTTP
245
Interactions PHP/JavaScript
247
Le tampon de sortie de PHP247
Le tampon par défaut
248
Créer un tampon utilisateur
248
Chapitre 11
Les cookies et les sessions251
Présentation
251
Forme du cookie sur l'ordinateur client252
Lecture et écriture d'un cookie
253
Envoi d'un cookie253
Lecture d'un cookie254
Modifier les valeurs d'un cookie255
Validité et date d'expiration
256
Suppression d'un cookie257
Tableaux et types complexes
257
Restriction de portée du cookie259
Limitations et sécurité
260
Limitations dues aux navigateurs260
Les cookies n'ont aucune sécurité260
Qu'est-ce qu'une session ?
261
Lecture et écriture
262
Utilisation avancée
263
Fonctionnement interne des sessions263
Suppression d'une session264
Définition manuelle de l'initialisation264
Stockage des données de session265
Paramètres du cookie265
Accès concurrents aux sessions266
Configuration des sessions PHP
266
Initialisation des sessions266
Stockage des données de session267
Paramètres du cookie267
Expiration des sessions267
Gestion du cache268
Transmission de l'identifiant269
Gestionnaires de sessions
270
Définir un gestionnaire personnalisé270
Limitations et sécurité
274
Cachez les sessions274
N'utilisez pas la réécriture des liens274
Les identifiants par défaut suffisent275
Attaque par fixation de session275
Vérifiez l'identité de l'utilisateur276
N'ayez pas confiance276
Cas d'application
276
Authentification par formulaire276
Contexte
276
Réalisation
277
Chapitre 12
Gestion des objets281
Introduction aux objets
281
Pourquoi programmer en objet ?281
Qu'est-ce qu'un objet ?282
Attributs et méthodes
282
Qu'est-ce qu'une classe ?282
Qu'est-ce qu'une instance ?283
Utilisation simple des objets
283
Déclarer une classe283
Attributs
283
Méthodes
284
Constantes
284
Utilisation des objets285
Instanciation
285
Utilisation d'un attribut
286
Utilisation des méthodes
287
Constantes
288
Déréférencement des méthodes
290
Affichage d'un objet
291
Vérifier le type d'un objet291
L'opérateur instanceof
291
La fonction get_class()
292
La syntaxe :: class
292
Copie et référence293
Des objets passés comme références293
La copie explicite d'objet, ou clonage294
Clonage par défaut
294
Clonage manuel
295
Contrôles d'accès pendant le clonage
295
Égalité et identité296
Constructeurs et destructeurs
297
Constructeur297
Destructeur299
La notion d'héritage
300
Définition de la notion d'héritage300
Définition d'une classe héritée300
Redéfinition d'attribut ou de méthode302
Héritage strict
302
Accès aux méthodes parentes303
Sûreté de programmation
304
Contrôle d'accès304
Accès public
304
Accès privé
305
Accès protégé
306
Utilisation
306
Redéfinition des contrôles d'accès
307
Typage307
Classes abstraites et interfaces309
Classes abstraites
309
Interfaces
310
Classes et méthodes finales
314
Accès statiques
314
Accès à une classe arbitraire314
Définition en vue d'un accès statique315
Accès à la classe en cours315
Accès à la classe parente315
Résolution statique à la volée316
La sérialisation et la désérialisation
317
Utilisation de _sleep() et _wakeup()318
L'interface Serializable319
La classe _PHP_Incomplete_Class320
Exemple : utilisation avec les sessions320
Sécurité : autoriser, interdire ou limiter la désérialisation de classes320
Surcharge
321
Affectations des attributs322
Lecture d'attribut (Mutator)322
Test d'existence d'un attribut323
Suppression d'un attribut323
Appel d'une méthode (Accessor)323
Appel d'une méthode statique324
Chapitre 13
Erreurs et exceptions325
Explications sur les erreurs
325
Qu'est-ce qu'une erreur ?325
Pourquoi gérer les erreurs ?326
Pendant le développement
326
En production
326
Que faire avec les erreurs ?326
Intercepter les erreurs
326
Enregistrer les erreurs
327
Les erreurs PHP
327
Description d'une erreur PHP327
Les bases d'une gestion d'erreurs328
Régir à une erreur
328
Régir à une erreur avec @
329
Configurer sa gestion d'erreurs
329
Les différents niveaux d'erreur
330
Filtrer les erreurs utiles
332
Créer une erreur manuellement333
Aide au développeur
334
Affichage personnalisé
334
Journalisation des erreurs (log)335
Journalisation automatique
335
Utilisation manuelle du journal
336
Utiliser le journal système
337
Personnaliser le gestionnaire d'erreurs339
Erreurs fatales internes à PHP
340
Les exceptions
340
Description d'une exception340
Personnalisation des exceptions342
Lancement d'une exception342
Réception d'une exception343
Filtrage des exceptions reçues343
Propagation des exceptions345
Interception par un bloc parent
345
Renvoi d'une exception au bloc parent
345
Gestionnaire d'exceptions par défaut
346
Utilisation des exceptions347
Les exceptions de PHP pour intercepter les erreurs fatales
348
Exceptions et code partagé
349
Les autres types d'exceptions de PHP
350
Exceptions imbriquées
352
Politiques de gestion d'erreurs
352
Le développement352
Être averti lors d'un problème353
Toujours agir lors d'une erreur353
Externaliser les alertes de sécurité353
Gardez des traces sur le contexte353
Chapitre 14
Typage en PHP355
Gérer le type des variables
355
Approche par défaut du typage356
Déterminer le type d'une variable356
Comparer des variables en tenant compte de leurs types357
Typage des fonctions et des méthodes
358
Introduction : types des paramètres et valeurs de retour358
Définir le type des paramètres359
Définir le type de la valeur de retour359
Déclarations de types scalaires (bool, int, float et string)360
Mettre en place une approche souple du typage
361
Mettre en place une approche stricte du typage
363
Les types nullables365
Déclarations de types non scalaires366
Tableaux
366
Classes et interfaces
367
Callable
369
Iterable
371
Liste des mots-clés réservés liés au typage
371
Chapitre 15
Gestion des dates373
Les dates et heures : avant de commencer
373
Le format « timestamp »373
La classe Datetime et sa famille374
La notion de « timezone »374
Les pièges des dates375
Les dates en timestamps
376
Formater une date/heure376
Utiliser un format correspondant à une locale378
Validité et comparaison de dates379
Une approche plus mûre : DateTime et sa famille
380
DateTimeZone381
DateTime, la classe au centre de la gestion des dates382
Créer un objet DateTime
382
Créer un objet DateTime à partir d'un format spécifique de date
383
Modifier une date
383
Calculer une différence entre deux dates
384
Formater une date
385
Et en cas d'erreur ?
386
Fuseau et heure d'été actuels et passés
386
DateInterval387
Des dates immuables avec DateTimeImmutable389
DatePeriod389
Chapitre 16
Gestion de flux simplifiés : les fichiers391
Lecture et écriture
391
Fonctions d'accès rapide392
Lecture rapide
392
Lecture des fichiers de type configuration (ini)
393
Exploiter un fichier CSV
396
Écriture rapide
398
Ouverture d'un fichier399
Fichiers distants
400
Mode d'ouverture
400
Lecture d'un fichier401
Lire caractère par caractère
402
Lire ligne par ligne
402
Lire un fichier entier
402
Écriture dans un fichier403
Positions dans le fichier404
Placer le pointeur en début de fichier
404
Placer le pointeur en un point du fichier
405
Connaître la position du pointeur
405
Détection de fin de fichier406
Fermeture d'un fichier406
Accès concurrents et verrouillage de fichiers407
Troncature à l'ouverture
407
Manipulation de fichiers
409
Copie et déplacement409
Création et effacement409
Création de fichier
409
Effacement de fichier
410
Liens410
Liens physiques
411
Liens symboliques
411
Fichiers temporaires411
Gestion des répertoires
412
Parcourir un répertoire412
Méthode objet
412
Approche procédurale
413
Filtre et listage rapide
413
Et avec la SPL ?
414
Position dans l'arborescence415
Créations et effacements416
Informations sur les fichiers
416
Existence d'un fichier417
Dates de fichiers417
Taille de fichier418
Espace disque disponible418
Nom et adresse d'un fichier419
Nature des fichiers419
Liens symboliques420
Permissions et droits d'accès
420
Changement de propriétaire421
Modifier les permissions421
Masque par défaut422
Sécurité et fichiers
422
Permissions et droits d'accès422
Arguments utilisateur422
open_basedir423
La SPL et les fichiers
423
Obtenir des informations sur un fichier avec SplFileInfo423
Manipuler un fichier avec SplFileObject425
Cas d'application
426
Outil de gestion documentaire simple426
Contexte
426
Réalisation
427
Chapitre 17
Utiliser une base de données431
Pdo
432
PDO : une couche d'abstraction de SGBD432
Fonctionnalités
432
Bases de données reconnues
433
Installation
433
Les classes de PDO
433
DSN et ouverture de connexion433
Structure du DSN
434
Ouverture de connexion
435
Erreur de connexion
435
Fermeture de connexion
436
Options et attributs de la connexion
436
Lancer une requête437
Requête de sélection
437
Écrire des données en base
438
Attention à l'échappement !
438
Parcourir un jeu de résultats440
Les requêtes préparées443
Construction d'une requête préparée
445
Préparer une requête
445
Lier des données à des paramètres et les exécuter
445
Déboguer une requête préparée
447
Fermeture de la requête préparée
447
Gestion des erreurs448
Utiliser les exceptions
449
Gestion transactionnelle449
Un bref point sur les SGBD-R et le langage SQL
450
Le modèle relationnel451
Fonctionnalités451
Transactions
451
Clés étrangères et intégrité référentielle
452
Procédures stockées et déclencheurs
452
Vues
452
Le SQL, un langage standardisé ?452
La structure des données453
Créer une base de données
453
Créer des tables
454
Modifier des tables
457
Supprimer des tables
457
Les index
457
Manipuler des données458
Insérer des données (INSERT)
458
Modifier des données (UPDATE)
459
Effacer des données (DELETE)
460
Filtrer avec la clause WHERE
461
Sélectionner des données (SELECT)
462
Gérer les transactions
466
Conclusions
466
API spécifiques à chaque SGBD
467
Accéder à une base de données MariaDB/MySQL avec mysqli467
Accéder à une base de données SQLite469
Une introduction à no-SQL
471
MongoDB : orientation document471
Principe général de MongoDB
472
Prérequis et installation
472
Connexion à MongoDB et collection
473
Lister les documents d'une collection
474
Requêtes plus avancées
474
Opérations d'écriture
475
Redis : orientation clé-valeur475
Principe général de Redis
476
Prérequis et installation
476
Connexion à Redis
476
Écrire et lire une donnée
477
Opérations plus avancées
478
Chapitre 18
POO avancée481
Les espaces de noms
481
Utilisation simple d'un espace de noms482
Définition simple d'un espace de noms
482
Utilisation simple d'un espace de noms
483
Déclarer plusieurs espaces de noms dans un même fichier484
Espace de noms par défaut, l'espace de noms racine484
Déclarer explicitement dans l'espace de noms racine
485
Redéfinir des classes, fonctions et constantes de PHP
485
Imbrication d'espaces de noms486
Accéder à un élément d'un espace de noms différent486
Cas de la programmation dynamique
487
Déterminer l'espace de noms courant488
Importer des espaces de noms488
Importer un espace de noms complet
488
Importer une classe ou une interface
489
Syntaxe d'imports groupés
490
Limitations des imports
491
Alias d'espace de noms491
Conventions de nommage492
Chargement automatique des classes (autoload)
493
Définition d'une fonction de chargement automatique495
Fonction de chargement automatique native496
Supprimer une fonction de chargement automatique497
Obtenir la liste des fonctions de chargement automatique497
La fonction _autoload()498
Réutilisation horizontale : les traits
498
Déclarer un trait499
Utiliser un trait499
Résolution de conflits500
Visibilité des méthodes importées502
Itérateurs et générateurs
502
Itération par défaut : visibilité sur les propriétés publiques504
Utilisation simple504
Utilisation complète avec Iterator Aggregate509
L'interface Traversable511
Les itérateurs de la SPL511
Générateurs511
Écrire un générateur
512
Retourner un résultat
514
Yield from
514
Passer une valeur au générateur
515
Notations d'index : ArrayAccess
516
Fonctions anonymes : la classe Closure
518
Les classes anonymes
520
Introspection
521
Principes pour démarrer522
Les différents objets à manipuler
522
Instanciation et premier export
523
Les fonctions524
Implémentation de la fonction
525
Les paramètres
525
Retour
526
Gestion des documentations en ligne
527
Exécution de la fonction
528
Les objets, classes et interfaces528
Instanciation de classe
529
Gestion des méthodes et des attributs
529
Droit d'accès et déclaration
529
Exécution de la méthode
529
Les attributs530
L'introspection au quotidien530
Chapitre 19
Gestion avancée des flux et du réseau531
Gestion des sockets réseau
531
Ouverture532
Types de sockets
532
Lecture et écriture533
Fermeture533
Fonctions de contrôle533
Fonctions bloquantes
533
Temps d'expiration
534
Statut de la connexion
535
Gestion unifiée des flux
536
Types de flux gérés536
Liste des abstractions gérées
536
Obtenir la liste des types de flux gérés
539
Utilisation simple540
Ouverture
540
Lecture et écriture
541
Fonctions de contrôle
541
Fermeture
543
Fonctions réseau
543
Autres fonctions
544
Contextes de flux544
Création d'un contexte
544
Modification d'un contexte
545
Lecture d'un contexte
545
Ouvertures de flux
545
Fonctions d'accès rapide
546
Filtres546
Utilisation
546
Liste des filtres prédéfinis
547
Ajouter un filtre personnalisé
547
Types de flux personnalisés549
Cas d'application
551
Sauvegardes automatiques pour interface réseau551
Contexte
551
Réalisation
551
Conversion entre jeux de caractères553
Contexte
553
Réalisation
553
Un serveur de chat asynchrone555
Chapitre 20
Échanges de données : XML, JSON et API557
XML
557
XML, un format standardisé558
Aperçu de la norme XML558
Entités et caractères spéciaux
559
Exemples d'utilisation
559
SimpleXLM559
Charger du XML et en obtenir
560
Lire les données
561
Écrire des données avec SimpleXML
564
DOMDocument565
Structure générale
566
Créer/charger un document
567
Obtenir du XML, enregistrer un document
568
Accéder à des noeuds
568
Naviguer dans le document
569
Les attributs
571
Modifier un document XML
572
XmlReader et XmlWriter576
Lire un fichier avec XMLReader
577
Écrire un fichier avec XMLWriter
578
Une introduction à Xpath579
Exemple avec SimpleXML
579
Exemple avec DOMDocument
580
Json
580
Encoder une donnée en JSON581
Décoder une chaîne JSON583
La sérialisation d'objets en JSON : l'interface JsonSerializable585
Gestion d'erreurs586
API
586
Des appels distants587
Appels d'API avec les flux de PHP587
Appels d'API avec des composants plus évolués589
Exemple d'appel d'API avec curl
589
Exemple d'appel d'API avec Guzzle
590
Exposer une API590
Une API simple de calcul
590
Les méthodes HTTP
592
Des routes cohérentes
592
Chapitre 21
PHP en lignes de commandes : CLI595
Installations et différences avec le fonctionnement en mode web
596
Installer php-cli596
Particularités de php-cli596
Rédiger ses premiers scripts
597
Apprivoiser le binaire CLI de PHP597
Invoquer de l'aide
598
Modifier la configuration
599
Exécuter du code depuis le Shell
599
Tester les erreurs de syntaxe
599
Savoir détecter l'utilisation de CLI599
Créer des scripts exécutables600
Utiliser le bon code de retour
600
Interagir avec l'utilisateur
601
Lire les options et arguments du programme602
Utiliser $_SERVER et $argc / $argu
602
Utiliser getopt()
604
Lire l'environnement
606
Définir une variable d'environnement607
Lire une variable d'environnement depuis PHP607
Les entrées/sorties
608
Consommer le flux d'entrée608
Écrire sur le flux de sortie610
Écrire sur le flux d'erreur610
PHP et les processus : exécuter des programmes
612
Lancement sans interaction612
Commande Shell rapide
613
Exécution d'un programme
613
Programmes en tâche de fond
615
Lancement interactif616
Ouverture des flux standards
616
Lecture et écriture
619
Statut des programmes exécutés
619
Fermeture
620
Sécurité et programmes externes621
Données externes dans la commande
621
Cas d'application
621
Système de paiement en ligne621
Contexte
621
Réalisation
622
Chapitre 22
Sécurité625
Qu'est-ce que la sécurité ?
625
Préoccupations du gestionnaire626
Préoccupations de l'utilisateur626
Importance des données utilisateur
627
Pourquoi parler de l'utilisateur ?327
Les risques
628
Déontologie
628
Installation, configuration de PHP et sécurité
628
Interface avec le serveur web629
Mode FastCGI avec PHP-FPM
629
Module Apache
629
Gestion des erreurs629
open_basedir et restrictions630
open_basedir
630
Sources et fichiers externes
630
Modules et processus externes
631
Sessions et identifiants632
Répertoire de stockage
632
Réécriture des liens
631
Vol et fixation de session
633
Mises à jour des logiciels633
Stockage des données et fichiers634
En dehors de la hiérarchie web
634
Avec des droits d'accès restreints
635
Interdiction d'accès pour le serveur web
635
Extensions des fichiers
635
Sécurité de l'application
636
Vérification des entrées utilisateur636
Paramètre dans une liste prévisible
636
Paramètre avec des critères connus
637
Cas par défaut dans une vérification
638
Envoi/upload de fichiers
639
Concordance et transtypage
639
Éviter les principales attaques641
Injection SQL
641
Cross Site Scripting
642
Cross Site Request Forgery
643
Exécution de commandes
644
Autres types de données et importance
644
Emplacement des contrôles645
Stockage du résultat chez l'utilisateur
645
Contrôles JavaScript
646
Mauvaises assertions
646
Protection par le secret
647
Gérer les erreurs647
Sécuriser les sessions647
Création manuelle des identifiants
648
Protection contre les vols de sessions
648
Protection contre la fixation de session
649
Chiffrement et sécurité649
Chiffrement et hachage
650
Chiffrement, hachage et mots de passe
651
Méthodes de chiffrement et de hachage offertes par PHP
652
Quelques bonnes habitudes
658
Vérifiez vos résultats658
Vérifiez vos fichiers de logs et de statistiques
659
Ne croyez pas l'utilisateur659
Restreignez les accès
660
Mais n'exagérez pas660
Faites-vous former ou formez vos équipes661
Faites réaliser un audit externe661
Chapitre 23
Installation et configuration avancées663
Un environnement de développement évolué
663
Installation sous Vagrant ou Docker663
Vagrant : la virtualisation reproductible
664
Docker : une approche à base de conteneurs
665
Installer un environnement de développement666
Un éditeur de code, un environnement intégré
666
Xdebug : une extension indispensable en développement !667
Utiliser PHP en production
668
Plusieurs schémas d'architecture669
Un seul serveur
669
Séparer PHP et le stockage des données
669
Plusieurs serveurs web/PHP
670
Plusieurs serveurs de bases de données
670
Des serveurs web séparés pour gérer le statique et le dynamique
672
Des serveurs de cache HTTP
672
D'autres systèmes de stockage ou de cache
674
Et le cloud alors ?
675
Installation sous Linux675
Installation depuis les paquets d'une distribution
676
Compilation manuelle de PHP
676
Maintenez PHP à jour !
678
Configuration478
Surveillance des erreurs
678
Sécurité
679
Performances et montée en charge
680
Configuration avancée de PHP-FPM681
Directives générales de configuration
681
Directives de configuration des groupes de processus
681
Le cache d'opcodes (OPCache)683
Gestion de la mémoire
685
Configurer le nombre de fichiers et leur revalidation
686
Surveiller, monitorer le cache
687
Index689