Programme de Formation Services web avec PHP
Introduction
Nombreux principes fondamentaux
Exemples de services web
Avantages et conséquences ; l'architecture
Rappels de PHP nécessaires
Services REST
Principes généraux
Sérialisations : XML, JSON, ...
Gestion des URL avec Apache
Atelier : consommation d'un service web REST public Atelier : création d'un site accesible en REST complet Normes essentielles de RPC Rappels complets de XML
Présentation de XML-RPC, WS*, SOAP, WSDL
Quelques cas particuliers
La bibliothèque SOAP
Présentation générale et alternatives
Mise en place d'un serveur
Accès par un client quelconque
Utiliser le WSDL
Cas additionnels (sécurité, encodage, binaire...)
Besoins spécifiques et questions
Atelier : un service web et sn client, et des situations additionnelles
Programme de Formation Usine Logicielle pour développeurs PHP
Appréhender la culture agile
Le manifeste Agile
De la vision à la livraison, la chronologie du projet
Le système sensoriel pour suivre l’évolution du projet
La planification et la gestion de l’inconnu
Le rythme : travailler de façon itérative
La mutation : amélioration progressive et continue du projet et des process
Quelques principes : KISS, YAGNI, empirisme, transparence, …
Apprendre les pratiques agiles
Le Lean Management : objectif, principes
Kanban : principe, avantage, cycle de vie d'une étiquette
Pratiques XP (eXtreme Programming)
Le cadre Scrum, distribution des rôles
Time boxes : Sprint planning, Sprint Review, Sprint Retrospective, Daily Scrum
Artéfacts : Product Backlog, Sprint Backlog, Burndown chart
Mettre en place une solution de gestion de version Git
Principes de gestion de contrôle de source (SCM)
Historique, contrôle local, centralisé et distribué
Fonctionnement des instantanées, comparaison avec les différences
Installation (Linux, MacOS, Windows)
Accès au manuel : man / help
Configuration initiale de Git : préférences, profil utilisateur
Initialisation d’un dépôt local
Atelier : Installation de Git - Création d'un projet Exploiter le dépôt local et son cycle de vie
Concepts, de répertoire de travail, index et dépôt
Vérifier l’état de la copie de travail : status
Indexer ses modifications : add
Ignorer des fichier : .gitignore
Valider ses modifications : commit
Supprimer et déplacer des fichiers
Atelier : contributions et validations Visualiser l’historique
Visualiser les modifications : log
Personnaliser le format : stat, pretty, …
Filtrer par date , auteur, message de commit, contenu modifié, ...
Visualiser et exporter une différence (format natif, outil externe)
Étiqueter ses validations : étiquettes légères et annotées
Rechercher avec git-grep
Annuler des actions
Réécrire la dernière validation
Désindexer un fichier
Réinitialiser un fichier
Travailler avec les branches
Principe de branche, le pointeur HEAD
Créer une branche
Basculer entre les branches, le mode détaché
Fusionner les branches : avance-rapide, trois sources
Gérer les conflits de fusion
Outil de fusion externe : mergetool (emerge, vimdiff, meld, …)
Visualiser les branches existantes, celles qui ont été fusionnées
Supprimer une branche
Stratégies de gestion de branches : branche longue, thématique, …
Travailler avec un dépôt distant
Dépôt distant, branches distantes, suivi de branche
Afficher et inspecter les dépôts distants
Ajouter, renommer, retirer ses dépôts distants
Tirer, pousser et supprimer une branche distante
Réécrire l’histoire, rebaser
Mise en garde : les dangers de la réécriture
Rebaser une portion de branche
Quand rebaser et quand fusionner
Remiser et nettoyer
Remiser son travail en cours
Créer une branche depuis une remise
Nettoyer son répertoire de travail
Personnaliser Git
Configurer éditeur par défaut, exclusions automatiques, ...
Création et utilisation d’alias
Outils graphiques : Git-Gui, GitKraken, SmartGit, ...
Créer des filtres : smudge et clean
Crochets côté client : pre-commit, pre-rebase, post-rewrite…
Crochets côté serveur : pre-receive, update, post-receive
Faire référence à un projet externe
Principe des sous-modules
Déclarer, tirer et mettre à jour un sous-module
Modifier et gérer les conflits sur une bibliothèque externe
Problèmes des sous-modules
Publier un dépôt Git sur un serveur
Les protocoles : local, HTTP, SSH, Git
Création d’un dépôt nu, comptes utilisateurs
Utilisateur git unique, clés SSH et git-shell
Démon Git
Atelier : Mise en place d’un serveur Git Appréhender Docker
Les différentes formes de virtualisation et leur concept
Présentation des avantages et des cas d'utilisation des conteneurs
Présentation de Docker et de son architecture Comprendre l'intégration continue Processus de développement, d'intégration et de déploiement
Intégration continue : présentation, positionnement dans une démarche agile
Gestion des environnements : développement, recette, production
Panorama outils de gestion : versionning, build, tests, qualité
Présentation d'outils d'intégration continue : Jenkins, GitLab-CI, Bamboo, …
Atelier : Publier un projet PHP sur une plateforme d’intégration continue Mettre en place un pipeline d’intégration PHP avec Gitlab-CI Chargement d’une image Docker PHP CLI
Mise en place du pipeline : les stages et les jobs
Exécution du pipeline et visualisation de la sortie
Configurer les dépendances entre jobs
Gérer le déclenchement de l’intégration suivant les branches ou tags
Atelier : Configurer et lancerl’intégration S’équiper pour l’assurance qualité Outils de qualité, types et intérêts
Analyse à froid : php_cs_fixer, PHP_CodeSniffer
Panorama des types tests : unitaires, fonctionnels, e2e
Stratégies des tests, TDD, BDD, StoryBDD, non-régression
Ce qu’il faut et ne faut pas tester
Atelier : Mettre en place un contrôle de convention d’écriture Tester son application Présentation de PHPUnit
Classes et méthodes de tests, assertion
Provisionner en données : fixtures
Les doublures : bouchons, mock
Les résultats : succès, échec, erreur, risqué, incomplet
Atelier : Mettre en place des tests automatisés, contrôler les scénarios Passer de l’intégrationau déploiement : le mouvement DevOps Présentation du mouvement DevOps
Valeurs DevOps: Culture, Automatisation, Lean, Mesure, Partage
Culture DevOps : présentation, caractéristiques, mise en place
Principe d’infrastructure as code
Présentation d’Ansible
Programme de Formation PHP Avancé : Modélisation, Webservices, Librairies courantes + Déploiement, Tests, Frameworks
Introduction
Rappels POO en PHP
Gestion du contexte applicatif
S'adapter à la version PHP : nouveautés, dépréciations et retraits, revue des versions actuelles
Design Patterns
Présentation et principe ; intéret des Design Patterns
Design Patterns spécifiques au Web
L'architecture MVC
Le Singleton, Factory, Builder
Le Proxy, Adapter, Bridge
L'Iterator, Observer
L'injection de dépendance
Atelier : Implémenter plusieurs design patternComposer
PHP en ligne de commande CLI
Installation de composer
Déclaration du projet
Déclaration de dépendances, contraintes de version
Dépendances relatives à la plate-forme
Mise à jour et installation des dépendances
Auto-chargement des définitions (PSR-0, PSR-4, classmap, files)
Débogage des incompatibilités (why, why-not)
Atelier : Déclarer son projet avec composer, importer une bibliothèqueLes bases de données
Rappels : Accès à une base de données
Notions de base SQL & NoSQL
Introduction au Mapping Relationnel Object
Intérêt et avantage à l'utilisation d'un ORM
ORM PHP: Doctrine, Propel
Atelier : Installer et utiliser un ORMCryptographie
Principes et Notions de cryptographie
Distinguer Chiffrement et Hachage
Choisir son algorithme (puissance / cout) selon l'objectif
L'extension PHP de chiffrement : OpenSSL
Les extensions PHP de hachage : Hash et Password_hash
Atelier : Créer une classe de ChiffrementWeb Services
Présentation des services web et d'une architecture SOA
Présentation du Web Services Description Language (WSDL)
La bibliothèque SOAP de php
Présentation d'une architecture REST
Atelier : Réalisation d'un Service Web RESTLes Tests en PHP
Bibliothèques de test Unitaire: PHPUnit, PHPSpec
Installation de PHPUnit
Ecriture d'une classe de test
Utilisation des assertions
Les helpers PHPUnit_Framework_TestCase
Utiliser les dépendances d'objet: Les Mocks
Exécution des tests
Atelier : Tester plusieurs classesDéploiement d'applications PHP
Sécurité des scripts PHP : éviter les failles
Se prémunir des attaques Cross-Site Scripting (XSS)
Eviter les injections SQL
Se protéger contre le Cross-Site Request Forgery (CSRF)
Gestion des erreurs et des exceptions PHP
Atelier : Protéger son application des failles phpEtude de cas : Utilisation d'un Framework
Introduction à CodeIgniter
Utiliser l'architecture MVC
Gestion des urls
Lier un controller à une url
Associer une vue à un controller
Utiliser les modèles
Atelier : Créer une application avec CodeIgniter
Programme de Formation PHP et les bibliothèques graphiques
PHP
Présentation de PHP
Rappels rapides : syntaxe, création de fonction
Présentation des librairies graphiques
La bibliothèque GD
Créer des images PNG, GIF, JPG
Obtenir les dimensions d’une image
Redimensionner une image
Transformer une image (écrire dessus, dessiner un cercle, etc…)
Les chaînes de caractères
La transparence des images - modes de fonctionnement et limites
Image Magick
Appliquer des effets de flou
Convertir une image d’un format à un autre
Solariser une image
Adjoindre une bordure
Les autres effets possibles : ajouter du bruit, jouer avec les contrastes, filtre médian, etc.
Etude de cas
Création d’une photothèque :
Spécifications de l’application
Conception technique
Schémas des bases de données
Création des imports de photos
Génération de miniatures
Modélisation d’effets (correction gamma, flou)
Introduction à la bibliothèque Ming
Créer une animation Flash
Créer un effet de mouvement
Créer un effet de couleur
La bibliothèque JPGraph
Une librairie spécifique pour créer des graphiques
Principe de fonctionnement
Présentation des différents formats de graphiques
Génération de courbes
Gestion des légendes et des intitulés des axes
Génération d’histogrammes
Génération de graphiques à partir de données mySQL
Génération d’autres graphiques
Etude de cas
Création d’un gestionnaire de projet :
Spécifications de l’application
Conception technique
Schémas des bases de données
Génération de diagramme GANTT
Génération de graphiques de suivi d'activité
Conclusion et bilan
Les différentes bibliothèques graphiques
Extension : Comment développer un diagramme PERT ?
Programme de Formation PHP Expert : Optimisation et industrialisation d'applications
Rappel: histoire de PHP
Les nouveautés de PHP7, PHPNG et HHVM
Principe d'architecture
Protocole centrée: présentation de PSR7, ReST et HATEOAS
MVC, découpler le domaine de l'applicatif
Plus de découplage: Interface based programming
Encore plus de découplage: microservices
Injection de dépendances
Frameworks
Les full-stack MVC framework: présentation de Symfony et Zend
Un composant classique l'ORM:
Les frameworks allégés: exemple de Silex
Paradigme collaborationiste et suppression des frameworks
Gestion des logs
Rappels: logs natifs de PHP
PSR-3: Logger-interface
Une implémentation: Monolog
Les processeurs (introspection, memory usage, ...)
Les formateurs (html, ChromePHP, ...)
Les wrappers (Buffer, Filter, FingersCrossed, ...)
Atelier : Mettre à disposition un logger à notre applicationLes environnements de développements
Environnement AMP local
Le serveur HTTP embarqué de PHP5
Virtualisation, gérer les déploiements avec vagrant
Virtualisation, moduler les dépendances avec Docker
Atelier : Créer un lanceur de serveur de développementMonitoring et Profiling
Monitoring : que surveiller ?
Présentation d'un outil tel que Monit
Profiling : xDebug, Xhprof et Xhgui
Profiling dans un framework : Symfony WebProfilerBundle
Profiling via un service externe : Blackfire
Test de montée en charge avec Apache Bench
Atelier : Profiler notre applicationOutils de développement
Système de contrôle de version (VCS) : SVN, Git
Gestion des branches
Documentation : PHPDoc
Environnement de développement intégré (IDE)
Fichier de configuration, les formats Yaml, XML, json
Chargeur de configuration
Inspecter le source : PHPStorm inspector, Sensio Insight
Optimiser l'écriture du code
Convention de code :PSR-1, PSR-2
Principes du développement SOLID
Vérifier les conventions : phpcpd, php-cs-fixer ...
Optimiser l'exécution
Outils d'optimisation / qualité de code
Erreurs courantes, solutions
Compression à la volée
Optimisation des algorithmes
Optimisation de la couche d'accès aux données: memcached
Cache HTTP, directives cache-control
Cache HTTP sur un reverse-proxy, présentation d'outils
Atelier : Multiples scénarios d'optimisation de codePassage de la certification (si prévue dans le financement)
Programme de Formation PHP Avancé : Modélisation, Webservices, Librairies courantes
Introduction
Rappels POO en PHP
Gestion du contexte applicatif
S'adapter à la version PHP : nouveautés, dépréciations et retraits, revue des versions actuelles
Design Patterns
Présentation et principe ; intéret des Design Patterns
Design Patterns spécifiques au Web
L'architecture MVC
Le Singleton, Factory, Builder
Le Proxy, Adapter, Bridge
L'Iterator, Observer
L'injection de dépendance
Atelier : Implémenter plusieurs design patternComposer
PHP en ligne de commande CLI
Installation de composer
Déclaration du projet
Déclaration de dépendances, contraintes de version
Dépendances relatives à la plate-forme
Mise à jour et installation des dépendances
Auto-chargement des définitions (PSR-0, PSR-4, classmap, files)
Débogage des incompatibilités (why, why-not)
Atelier : Déclarer son projet avec composer, importer une bibliothèqueLes bases de données
Rappels : Accès à une base de données
Notions de base SQL & NoSQL
Introduction au Mapping Relationnel Object
Intérêt et avantage à l'utilisation d'un ORM
ORM PHP: Doctrine, Propel
Atelier : Installer et utiliser un ORMCryptographie
Principes et Notions de cryptographie
Distinguer Chiffrement et Hachage
Choisir son algorithme (puissance / cout) selon l'objectif
L'extension PHP de chiffrement : OpenSSL
Les extensions PHP de hachage : Hash et Password_hash
Atelier : Créer une classe de ChiffrementWeb Services
Présentation des services web et d'une architecture SOA
Présentation du Web Services Description Language (WSDL)
La bibliothèque SOAP de php
Présentation d'une architecture REST
Atelier : Réalisation d'un Service Web REST