Ecrire et déployer uneappli PHP maintenable  Christophe Villeneuve   Pierre Couzy  Consultant PHP          Relation techni...
Pourquoi nous ?Christophe Villeneuve   Pierre Couzy
Un petit quiz ?Select * from MaTable order by rand()   Select login from user where id=31                                 ...
Par où commencer ? Les incontournables     Outils     Runtime     Extensions Code et dépendances      Paramétrage     Les ...
Les incontournables
Les outilshttp://www.flickr.com/photos/fruhjk/5145895601/sizes/z/in/photostream/
Les outils  Liés avec le système dexploitation      Linux, Mac, Windows  Environnement embarqué (AMP)      Wampserver, Eas...
Le runtime
La version de PHP    PHP 5.2         PHP 5.3 & +
La version de PHP  LOS       Profil de performance différent entre les       différentes versions PHP  (5.2 et 5.3 pour wi...
PHP 5.4Comment sy préparer ?  Un overview des nouveautés et différences   Serveur HTTP → php -S localhost:8000   Les trait...
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 ...
Extensions  Installer PHP sans extensions  Activer le reporting  Ajouter le strict minimum  Mettez php.ini au carré       ...
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
LapplicationOK, 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 /...
Les données
Base de données Le minimum     Une couche technique dabstraction     Un référentiel pour les requêtes custom PDO       Pas...
ORM ou pas ORM ? Les gros :      Doctrine, Propel Les petits :      Micro-ORM      Kohana, Paris, ADODB  Vous devez faire ...
NoSQL  ?  Pour     Montée en charge séduisante     Gestion de déploiement familière  Contre       Qui s’y frotte … Pour en...
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...
Log,trace,instrumentation ?   Fichiers auto-générés   Vignettes   Sessions   Paramétrage des logs      Log errors = on    ...
Sécurité  5 premiers trous => 86% en 2010       Injection       Cross Site Scripting (XSS)       Violation dauthentificati...
Production & perfs
Montée en chargeCode                               RéseauProfils de charge inattendus       Temps de réponse plus long→ Un...
De CGI à FastCGI
Et ça marche ?        http://forge.bearstech.com/trac/wiki/DebianLampLenny
Optimisation  Optimiser cest mal      En DEV      Avant la mise en prod      Par copier / coller des trucs sur internet
Gestion du cache  Sur le serveur      Cache dopcode      Cache de résolution dns/filesystem      User code ?      Caches d...
Le déploiement
Il reste... le déploiement          SMTP                     FTP / FTPs Quelques emails              Pour la mise en prod ...
Conclusion  Automatiser la chaine de build     Tout ce qui a été vu avant     Une passe sur lanalyseur statique de code   ...
Merci ! Questions ?                      hellosct1
Ecrire et déployer une appli PHP maintenable
Upcoming SlideShare
Loading in...5
×

Ecrire et déployer une appli PHP maintenable

770

Published on

Conférence 'Ecrire et déployer une appli PHP maintenable' présentée au TechDays 2012 à Paris par Christophe Villeneuve et Pierre Couzy

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
770
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Ecrire et déployer une appli PHP maintenable"

  1. 1. Ecrire et déployer uneappli PHP maintenable Christophe Villeneuve Pierre Couzy Consultant PHP Relation technique FLOSS Alter Way Microsoft 7 Février 2012
  2. 2. Pourquoi nous ?Christophe Villeneuve Pierre Couzy
  3. 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. 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
  5. 5. Les incontournables
  6. 6. Les outilshttp://www.flickr.com/photos/fruhjk/5145895601/sizes/z/in/photostream/
  7. 7. Les outils Liés avec le système dexploitation 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)
  8. 8. Le runtime
  9. 9. La version de PHP PHP 5.2 PHP 5.3 & +
  10. 10. La version de PHP LOS 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 à lanalyse par CoVerity Gestion derreurs parfois subtilement différente
  11. 11. PHP 5.4Comment sy 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) Limpact sur vos applications Evolutions des ARRAYs Economie de mémoire en désactivant des données venant de $_POST Limpact sur windows
  12. 12. Les extensions
  13. 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. 14. Extensions Installer PHP sans extensions Activer le reporting Ajouter le strict minimum Mettez php.ini au carré Ne pas jeter Les extensions inutiles
  15. 15. Gestion versions/extensionsÇa reste un problème délicat
  16. 16. phpinfo() A vérifier sur la bécane de développement et après mise en prod et à garder dans les docs
  17. 17. LapplicationOK, peut-être que tout n’est pas écrit en PHP dans cette illustration.
  18. 18. Paramétrage
  19. 19. Le paramétrage © symfony
  20. 20. Regrouper les paramètres © Wordpress 
  21. 21. 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
  22. 22. Les données
  23. 23. Base de données Le minimum Une couche technique dabstraction Un référentiel pour les requêtes custom PDO Pas complet Une parenthèse sur les ORM ? NoSQL ?
  24. 24. ORM ou pas ORM ? Les gros : Doctrine, Propel Les petits : Micro-ORM Kohana, Paris, ADODB Vous devez faire un choix : Plus cest 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
  25. 25. 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)
  26. 26. Les autres points
  27. 27. 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 Lupgrade est fait par code
  28. 28. 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
  29. 29. Sécurité 5 premiers trous => 86% en 2010 Injection Cross Site Scripting (XSS) Violation dauthentification 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/)
  30. 30. Production & perfs
  31. 31. Montée en chargeCode RéseauProfils de charge inattendus Temps de réponse plus long→ Un appel synchrone à FB → Lag qui passe de 1 à 10 msoublié sur la Home PageBase de données MatérielLhistorique est dans la base de Quelques mégas sur disque,données → cest raisonnable ?→ Pourquoi la question ?
  32. 32. De CGI à FastCGI
  33. 33. Et ça marche ? http://forge.bearstech.com/trac/wiki/DebianLampLenny
  34. 34. Optimisation Optimiser cest mal En DEV Avant la mise en prod Par copier / coller des trucs sur internet
  35. 35. Gestion du cache Sur le serveur Cache dopcode 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 ?)
  36. 36. Le déploiement
  37. 37. 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
  38. 38. Conclusion Automatiser la chaine de build Tout ce qui a été vu avant Une passe sur lanalyseur 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 lapplication par quelquun dautre Ne déranger pas cette personne lors de linstall Tout livrer et documenter linstallation
  39. 39. Merci ! Questions ? hellosct1
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×