SlideShare une entreprise Scribd logo
Ecrire et déployer une
appli PHP maintenable

  Christophe Villeneuve   Pierre Couzy
  Consultant PHP          Relation technique FLOSS
  Alter Way               Microsoft




                            7 Février 2012
Pourquoi nous ?

Christophe Villeneuve   Pierre Couzy
Un petit quiz ?

Select * from MaTable order by rand()   Select login from user where id=31

                                        Select password from user
                                                               where id=31

                                        If (password === pwd) select …




Machin = select toto from …             C’est corrigé ?
                                        Oui.
If ! cache(« machin »)                  Testé ?
  Cache(« machin ») = Machin            Oui, la page fonctionne au poil
                                        Bon, on déploie !
blabla
Par où commencer ?
 Les incontournables
     Outils
     Runtime
     Extensions
 Code et dépendances 
     Paramétrage
     Les données
     Les autres points
 La production
     Le serveur
     L’optimisation
     Le cache
     Le déploiement
Les incontournables
Les outils




http://www.flickr.com/photos/fruhjk/5145895601/sizes/z/in/photostream/
Les outils
  Liés avec le système d'exploitation
      Linux, Mac, Windows

  Environnement embarqué (AMP)
      Wampserver, EasyPHP, Xampp, Mampp, WebMatrix

  IDE (Editeurs dits intelligents)
      Eclipse, NetBean, PHPstorm, Zend Studio
          (y a même VS.php pour Visual Studio)
Le runtime
La version de PHP
    PHP 5.2         PHP 5.3 & +
La version de PHP
  L'OS
       Profil de performance différent entre les
       différentes versions PHP
  (5.2 et 5.3 pour windows)

  Impact sur les versions majeures
      Fonctions obsolètes
      Vieux workarounds qui cessent de fonctionner
      Nouveaux bugs

  Impact sur les versions mineures
      Corrections apportées suite à l'analyse par
      CoVerity
      Gestion d'erreurs parfois subtilement différente
PHP 5.4
Comment s'y préparer ?
  Un overview des nouveautés et différences
   Serveur HTTP → php -S localhost:8000
   Les traits
   E_STRICT couvert par error_reporting (E_ALL)

  L'impact sur vos applications
   Evolutions des ARRAYs
   Economie de mémoire en désactivant
 des données venant de $_POST

  L'impact sur windows
Les extensions
Les extensions, c’est facile !
  Calendar : installé ou pas ?

  Mb_string : en mod_php sur 5.2 en mutualisé
  Si l’un active mb_string les autres en 'profitent'

   Si vous ajoutez une extension dans une install existante,
  vous prenez quelle version ?

  La fin du cauchemar sous Windows 
         VC 9 NTS pour IIS
         VC 6 TS (Apache) : NON, stop, laissez tomber !
Extensions
  Installer PHP sans extensions
  Activer le reporting
  Ajouter le strict minimum
  Mettez php.ini au carré




         Ne pas jeter

 Les extensions inutiles
Ecrire et déployer une appli PHP maintenable
Gestion versions/extensions


Ça reste un problème délicat
phpinfo()
  A vérifier sur la bécane de développement
  et après mise en prod et à garder dans les docs
L'application




OK, peut-être que tout n’est pas écrit en PHP dans cette illustration.
Paramétrage
Le paramétrage




            © symfony
Regrouper les paramètres




           © Wordpress 
A retenir
  Paramètres regroupés

  Différenciés par
  environnement de
  déploiement

  Différenciés par nature
  appli / infra / opti / …

  Préférez des formats texte
  … et documentés

                        © Joomla
Les données
Base de données
 Le minimum
     Une couche technique
 d'abstraction
     Un référentiel pour les
 requêtes custom

 PDO
       Pas complet

  Une parenthèse sur les ORM ?

  NoSQL ?
ORM ou pas ORM ?
 Les gros :
      Doctrine, Propel

 Les petits :
      Micro-ORM
      Kohana, Paris, ADODB

  Vous devez faire un choix :
      Plus c'est gros moins on le comprend
      Quand on choisit un composant, on le supporte
     (on maintient les versions, on suit les patches, etc.)

 Aucun ORM = plein de problèmes
NoSQL  ?
  Pour
     Montée en charge séduisante
     Gestion de déploiement familière
  Contre
       Qui s’y frotte …
 Pour en savoir plus remontez dans le temps
 (session était à 13h00)
Les autres points
Mise à jour
  Page offline pour MAJ
  au lieu de couper le serveur
  et de manger des 404...

  Stratégie de mise à jour
      Séparer les données
      UGC
      Données de structure / modules   / etc

  Exemple : Drupal (un nouveau module)
      Le filesystem
      La base de données
      Même sans contenus utilisateur
      L'upgrade est fait par code
Log,trace,instrumentation ?
   Fichiers auto-générés
   Vignettes
   Sessions
   Paramétrage des logs
      Log errors = on
      Display_errors = off
      E_STRICT (!!)
      E_ALL
      E_DEPRECATED
      E_NOTICE
Sécurité
  5 premiers trous => 86% en 2010
       Injection
       Cross Site Scripting (XSS)
       Violation d'authentification et de session
       Références directes non sécurisées à un objet
       Falsification de requête intersite (CSRF)

  Comment se protéger ?
      Vega (http://subgraph.com)
      PHP Lint (http://www.icosaedro.it/phplint/)
Production & perfs
Montée en charge
Code                               Réseau

Profils de charge inattendus       Temps de réponse plus long

→ Un appel synchrone à FB          → Lag qui passe de 1 à 10 ms
oublié sur la Home Page



Base de données                    Matériel

L'historique est dans la base de   Quelques mégas sur disque,
données
                                   → c'est raisonnable ?
→ Pourquoi la question ?
De CGI à FastCGI
Et ça marche ?




        http://forge.bearstech.com/trac/wiki/DebianLampLenny
Optimisation
  Optimiser c'est mal
      En DEV
      Avant la mise en prod
      Par copier / coller des trucs sur internet
Gestion du cache
  Sur le serveur
      Cache d'opcode
      Cache de résolution dns/filesystem
      User code ?
      Caches de rendu divers et variés
      Cache de Base de données

  Entre bécances
      Session dans APC / Memcache...

  Au cul des bécances
      Varnish / Akamaï (Session de cookie ?)
Le déploiement
Il reste... le déploiement
          SMTP                     FTP / FTPs
 Quelques emails              Pour la mise en prod
 
   Votre hébergeur
                              Exports divers et variés
 Pour du SPAM
 
   Service dédié et externe   Reparamétrage
   (cristend,etc.)

 Outils
 
   SendGrid
 
   Sarbacane
 
   EMailing Automate (EMA)

 En PHP
 
   Emailing
 
   phpList
Conclusion
  Automatiser la chaine de build
     Tout ce qui a été vu avant
     Une passe sur l'analyseur statique de code
     Une passe sur le générateur de doc
     Un rapport et tagger la version dans le contrôleur

  Si vous ne pouvez pas
     Faîtes installer l'application par quelqu'un d'autre
     Ne déranger pas cette personne lors de l'install

  Tout livrer et documenter l'installation
Merci ! Questions ?




                      hellosct1

Contenu connexe

PPTX
PHP : écrire et déployer des applications maintenables !
PDF
Alphorm.com Formation PRTG Network Monitor : installation et configuration
PPTX
ça marchait pourtant en dev
PDF
Alphorm.com Formation Forensic sur Android
PDF
Alphorm.com Formation hak5 : USB Rubber Ducky
PDF
Alphorm.com Formation Wireshark : L'essentiel
PPT
Découverte d'aeSecure, sécurisation et optimisation sites Apache
PDF
Gestion des dépendances dans un projet PHP - RMLL 2012
PHP : écrire et déployer des applications maintenables !
Alphorm.com Formation PRTG Network Monitor : installation et configuration
ça marchait pourtant en dev
Alphorm.com Formation Forensic sur Android
Alphorm.com Formation hak5 : USB Rubber Ducky
Alphorm.com Formation Wireshark : L'essentiel
Découverte d'aeSecure, sécurisation et optimisation sites Apache
Gestion des dépendances dans un projet PHP - RMLL 2012

Tendances (9)

PPTX
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
PPTX
Projet groupware et_outils_informatiques
PDF
symfony : Un Framework Open-Source pour les Professionnels
PDF
Hibernate vs le_cloud_computing
PDF
Alphorm.com Formation Windows ICD (Imaging Configuration Designer)
PDF
Alphorm.com Formation pfSense (2/2) Le firewall open source de référence
PDF
Alphorm.com Formation Security+ 2/2 partie 1
PPTX
EcmaScript
PDF
Support POO Java première partie
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Projet groupware et_outils_informatiques
symfony : Un Framework Open-Source pour les Professionnels
Hibernate vs le_cloud_computing
Alphorm.com Formation Windows ICD (Imaging Configuration Designer)
Alphorm.com Formation pfSense (2/2) Le firewall open source de référence
Alphorm.com Formation Security+ 2/2 partie 1
EcmaScript
Support POO Java première partie
Publicité

En vedette (20)

PPTX
Previsión Social de los Miembros del Personal Docente y de Investigación de l...
PPTX
Les photos du tournage Ensemble, elles'gaz!
PDF
El modelo de relaciones laborales que emerge tras la crisis económica y socia...
PPT
Parcours Patrimoine - Le Patrimoine se signale
DOC
Pedagogía cognitiva
PPTX
Actividad 5.0
PPTX
2013 12 familia biológica
PPTX
Fatla
PDF
Comparación normativa 1998 y 2012. Contrato para la formación y el aprendizaje.
PDF
Lettre aux auditeurs Rcf26 Septembre 2013
PPTX
Les réseaux sociaux (Atelier numérique de Versailles)
PDF
Déclaration BDI / MEDEF du 5 février 2014
PPTX
Le referencement - Pourquoi en prendre soin?
PDF
Journal n°51 Janvier 2012
PDF
Rapport-pacte-compétitivité-gallois
PPTX
Herramientas para twitter
PPT
Los cinco colores que te darán salud!!
PDF
Diseño una situación de aprendizaje con base en los planteamientos de la didá...
PPTX
B2B Associations PME Lausanne 08032012
PPT
Eos 550 premier tri pps
Previsión Social de los Miembros del Personal Docente y de Investigación de l...
Les photos du tournage Ensemble, elles'gaz!
El modelo de relaciones laborales que emerge tras la crisis económica y socia...
Parcours Patrimoine - Le Patrimoine se signale
Pedagogía cognitiva
Actividad 5.0
2013 12 familia biológica
Fatla
Comparación normativa 1998 y 2012. Contrato para la formación y el aprendizaje.
Lettre aux auditeurs Rcf26 Septembre 2013
Les réseaux sociaux (Atelier numérique de Versailles)
Déclaration BDI / MEDEF du 5 février 2014
Le referencement - Pourquoi en prendre soin?
Journal n°51 Janvier 2012
Rapport-pacte-compétitivité-gallois
Herramientas para twitter
Los cinco colores que te darán salud!!
Diseño una situación de aprendizaje con base en los planteamientos de la didá...
B2B Associations PME Lausanne 08032012
Eos 550 premier tri pps
Publicité

Similaire à Ecrire et déployer une appli PHP maintenable (20)

PPTX
Développer et déployer une application php maintenable
PPT
2008-09-30 Administration automatisée avec Powershell
PDF
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
PPTX
Php sous Windows - webcamps Paris
PDF
Optimiser WordPress
PDF
Optimiser wordpress
PDF
Un site de collectivité sur WordPress ? Méthodes et retours d'XP
PPTX
Performance et optimisation de PrestaShop
ODP
Industrialisez vos projets Php
PPTX
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
PDF
AlterWay SolutionsLinux Outils Industrialisation PHP
PPT
20090615 - Ch'ti JUG - Apache Maven
PPTX
Devoxx 2017 : toutes les actualités technologiques à surveiller !
PDF
Jabes 2015 - Poster SCD Université Nantes : "Une suite d'outils pour l'exempl...
ODP
Déploiement PHP : de l'âge de pierre à nos jours.
PPTX
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
KEY
Techdays2011
PPTX
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
PPTX
Les nouveautés du Framework .NET 4.5
PPT
Asp Au Service Des Mv Ps
Développer et déployer une application php maintenable
2008-09-30 Administration automatisée avec Powershell
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Php sous Windows - webcamps Paris
Optimiser WordPress
Optimiser wordpress
Un site de collectivité sur WordPress ? Méthodes et retours d'XP
Performance et optimisation de PrestaShop
Industrialisez vos projets Php
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
AlterWay SolutionsLinux Outils Industrialisation PHP
20090615 - Ch'ti JUG - Apache Maven
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Jabes 2015 - Poster SCD Université Nantes : "Une suite d'outils pour l'exempl...
Déploiement PHP : de l'âge de pierre à nos jours.
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
Techdays2011
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
Les nouveautés du Framework .NET 4.5
Asp Au Service Des Mv Ps

Plus de Christophe Villeneuve (20)

PDF
MariaDB une base de donnees NewSQL
PDF
La boîte à outils de développements dans Firefox
PDF
pister les pisteurs
PDF
controler vos donnees éthiques dans le web
PDF
Infrastructure as code drupal
PDF
Mariadb une base de données NewSQL
PDF
Open Source et contribution : Une association gagnante
PDF
Pentest bus pirate
PDF
Peur de la migration vers l’open source ?
PDF
La sécurité applicative par le design
PDF
Foxfooding semaine 3
PDF
PDF
Accessibilite web wcag rgaa
PDF
Mozilla french speaking community activites
PDF
Monitoring dynamique : Grafana et Microsoft
PDF
Etes vous-pret pour php8 ?
PDF
Le futur de l'authentification webAuthn
PDF
Send large files with addons
PDF
Tests d'accessibilite par la pratique
PDF
Donnez la voix aux machines
MariaDB une base de donnees NewSQL
La boîte à outils de développements dans Firefox
pister les pisteurs
controler vos donnees éthiques dans le web
Infrastructure as code drupal
Mariadb une base de données NewSQL
Open Source et contribution : Une association gagnante
Pentest bus pirate
Peur de la migration vers l’open source ?
La sécurité applicative par le design
Foxfooding semaine 3
Accessibilite web wcag rgaa
Mozilla french speaking community activites
Monitoring dynamique : Grafana et Microsoft
Etes vous-pret pour php8 ?
Le futur de l'authentification webAuthn
Send large files with addons
Tests d'accessibilite par la pratique
Donnez la voix aux machines

Ecrire et déployer une appli PHP maintenable

  • 1. Ecrire et déployer une appli PHP maintenable Christophe Villeneuve Pierre Couzy Consultant PHP Relation technique FLOSS Alter Way Microsoft 7 Février 2012
  • 3. Un petit quiz ? Select * from MaTable order by rand() Select login from user where id=31 Select password from user where id=31 If (password === pwd) select … Machin = select toto from … C’est corrigé ? Oui. If ! cache(« machin ») Testé ? Cache(« machin ») = Machin Oui, la page fonctionne au poil Bon, on déploie ! blabla
  • 4. Par où commencer ? Les incontournables Outils Runtime Extensions Code et dépendances  Paramétrage Les données Les autres points La production Le serveur L’optimisation Le cache Le déploiement
  • 7. Les outils Liés avec le système d'exploitation Linux, Mac, Windows Environnement embarqué (AMP) Wampserver, EasyPHP, Xampp, Mampp, WebMatrix IDE (Editeurs dits intelligents) Eclipse, NetBean, PHPstorm, Zend Studio (y a même VS.php pour Visual Studio)
  • 9. La version de PHP PHP 5.2 PHP 5.3 & +
  • 10. La version de PHP L'OS Profil de performance différent entre les différentes versions PHP (5.2 et 5.3 pour windows) Impact sur les versions majeures Fonctions obsolètes Vieux workarounds qui cessent de fonctionner Nouveaux bugs Impact sur les versions mineures Corrections apportées suite à l'analyse par CoVerity Gestion d'erreurs parfois subtilement différente
  • 11. PHP 5.4 Comment s'y préparer ? Un overview des nouveautés et différences Serveur HTTP → php -S localhost:8000 Les traits E_STRICT couvert par error_reporting (E_ALL) L'impact sur vos applications Evolutions des ARRAYs Economie de mémoire en désactivant des données venant de $_POST L'impact sur windows
  • 13. Les extensions, c’est facile ! Calendar : installé ou pas ? Mb_string : en mod_php sur 5.2 en mutualisé Si l’un active mb_string les autres en 'profitent' Si vous ajoutez une extension dans une install existante, vous prenez quelle version ? La fin du cauchemar sous Windows  VC 9 NTS pour IIS VC 6 TS (Apache) : NON, stop, laissez tomber !
  • 14. Extensions Installer PHP sans extensions Activer le reporting Ajouter le strict minimum Mettez php.ini au carré Ne pas jeter Les extensions inutiles
  • 16. Gestion versions/extensions Ça reste un problème délicat
  • 17. phpinfo() A vérifier sur la bécane de développement et après mise en prod et à garder dans les docs
  • 18. L'application OK, peut-être que tout n’est pas écrit en PHP dans cette illustration.
  • 20. Le paramétrage © symfony
  • 21. Regrouper les paramètres © Wordpress 
  • 22. A retenir Paramètres regroupés Différenciés par environnement de déploiement Différenciés par nature appli / infra / opti / … Préférez des formats texte … et documentés © Joomla
  • 24. Base de données Le minimum Une couche technique d'abstraction Un référentiel pour les requêtes custom PDO Pas complet Une parenthèse sur les ORM ? NoSQL ?
  • 25. ORM ou pas ORM ? Les gros : Doctrine, Propel Les petits : Micro-ORM Kohana, Paris, ADODB Vous devez faire un choix : Plus c'est gros moins on le comprend Quand on choisit un composant, on le supporte (on maintient les versions, on suit les patches, etc.) Aucun ORM = plein de problèmes
  • 26. NoSQL  ? Pour Montée en charge séduisante Gestion de déploiement familière Contre Qui s’y frotte … Pour en savoir plus remontez dans le temps (session était à 13h00)
  • 28. Mise à jour Page offline pour MAJ au lieu de couper le serveur et de manger des 404... Stratégie de mise à jour Séparer les données UGC Données de structure / modules / etc Exemple : Drupal (un nouveau module) Le filesystem La base de données Même sans contenus utilisateur L'upgrade est fait par code
  • 29. Log,trace,instrumentation ? Fichiers auto-générés Vignettes Sessions Paramétrage des logs Log errors = on Display_errors = off E_STRICT (!!) E_ALL E_DEPRECATED E_NOTICE
  • 30. Sécurité 5 premiers trous => 86% en 2010 Injection Cross Site Scripting (XSS) Violation d'authentification et de session Références directes non sécurisées à un objet Falsification de requête intersite (CSRF) Comment se protéger ? Vega (http://subgraph.com) PHP Lint (http://www.icosaedro.it/phplint/)
  • 32. Montée en charge Code Réseau Profils de charge inattendus Temps de réponse plus long → Un appel synchrone à FB → Lag qui passe de 1 à 10 ms oublié sur la Home Page Base de données Matériel L'historique est dans la base de Quelques mégas sur disque, données → c'est raisonnable ? → Pourquoi la question ?
  • 33. De CGI à FastCGI
  • 34. Et ça marche ? http://forge.bearstech.com/trac/wiki/DebianLampLenny
  • 35. Optimisation Optimiser c'est mal En DEV Avant la mise en prod Par copier / coller des trucs sur internet
  • 36. Gestion du cache Sur le serveur Cache d'opcode Cache de résolution dns/filesystem User code ? Caches de rendu divers et variés Cache de Base de données Entre bécances Session dans APC / Memcache... Au cul des bécances Varnish / Akamaï (Session de cookie ?)
  • 38. Il reste... le déploiement SMTP FTP / FTPs Quelques emails Pour la mise en prod  Votre hébergeur Exports divers et variés Pour du SPAM  Service dédié et externe Reparamétrage (cristend,etc.) Outils  SendGrid  Sarbacane  EMailing Automate (EMA) En PHP  Emailing  phpList
  • 39. Conclusion Automatiser la chaine de build Tout ce qui a été vu avant Une passe sur l'analyseur statique de code Une passe sur le générateur de doc Un rapport et tagger la version dans le contrôleur Si vous ne pouvez pas Faîtes installer l'application par quelqu'un d'autre Ne déranger pas cette personne lors de l'install Tout livrer et documenter l'installation
  • 40. Merci ! Questions ? hellosct1