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

Tendances

Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementAccroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Christophe Avonture
 
Projet groupware et_outils_informatiques
Projet groupware et_outils_informatiquesProjet groupware et_outils_informatiques
Projet groupware et_outils_informatiques
Rémi Bachelet
 
symfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnelssymfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnels
Fabien Potencier
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
Ippon
 
Alphorm.com Formation Windows ICD (Imaging Configuration Designer)
Alphorm.com Formation Windows ICD (Imaging Configuration Designer)Alphorm.com Formation Windows ICD (Imaging Configuration Designer)
Alphorm.com Formation Windows ICD (Imaging Configuration Designer)
Alphorm
 
Alphorm.com Formation pfSense (2/2) Le firewall open source de référence
Alphorm.com Formation pfSense (2/2) Le firewall open source de référenceAlphorm.com Formation pfSense (2/2) Le firewall open source de référence
Alphorm.com Formation pfSense (2/2) Le firewall open source de référence
Alphorm
 
Alphorm.com Formation Security+ 2/2 partie 1
Alphorm.com Formation Security+ 2/2 partie 1Alphorm.com Formation Security+ 2/2 partie 1
Alphorm.com Formation Security+ 2/2 partie 1
Alphorm
 
EcmaScript
EcmaScriptEcmaScript
EcmaScript
Dagbouj Hatem
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
ENSET, Université Hassan II Casablanca
 

Tendances (9)

Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementAccroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
 
Projet groupware et_outils_informatiques
Projet groupware et_outils_informatiquesProjet groupware et_outils_informatiques
Projet groupware et_outils_informatiques
 
symfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnelssymfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnels
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Alphorm.com Formation Windows ICD (Imaging Configuration Designer)
Alphorm.com Formation Windows ICD (Imaging Configuration Designer)Alphorm.com Formation Windows ICD (Imaging Configuration Designer)
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 pfSense (2/2) Le firewall open source de référenceAlphorm.com Formation pfSense (2/2) Le firewall open source de référence
Alphorm.com Formation pfSense (2/2) Le firewall open source de référence
 
Alphorm.com Formation Security+ 2/2 partie 1
Alphorm.com Formation Security+ 2/2 partie 1Alphorm.com Formation Security+ 2/2 partie 1
Alphorm.com Formation Security+ 2/2 partie 1
 
EcmaScript
EcmaScriptEcmaScript
EcmaScript
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 

En vedette

Previsión Social de los Miembros del Personal Docente y de Investigación de l...
Previsión Social de los Miembros del Personal Docente y de Investigación de l...Previsión Social de los Miembros del Personal Docente y de Investigación de l...
Previsión Social de los Miembros del Personal Docente y de Investigación de l...
Freddy Figueira
 
Les photos du tournage Ensemble, elles'gaz!
Les photos du tournage Ensemble, elles'gaz!Les photos du tournage Ensemble, elles'gaz!
Les photos du tournage Ensemble, elles'gaz!
ensemble_elles_gaz
 
El modelo de relaciones laborales que emerge tras la crisis económica y socia...
El modelo de relaciones laborales que emerge tras la crisis económica y socia...El modelo de relaciones laborales que emerge tras la crisis económica y socia...
El modelo de relaciones laborales que emerge tras la crisis económica y socia...
Universidad Autónoma de Barcelona
 
Parcours Patrimoine - Le Patrimoine se signale
Parcours Patrimoine - Le Patrimoine se signaleParcours Patrimoine - Le Patrimoine se signale
Parcours Patrimoine - Le Patrimoine se signale
ABES
 
Pedagogía cognitiva
Pedagogía cognitivaPedagogía cognitiva
Pedagogía cognitiva
JOHN ALEXANDER
 
Actividad 5.0
Actividad 5.0Actividad 5.0
Actividad 5.0
JOHN ALEXANDER
 
2013 12 familia biológica
2013 12 familia biológica2013 12 familia biológica
2013 12 familia biológica
luisel
 
Fatla
FatlaFatla
Fatla
ESPOCH
 
Comparación normativa 1998 y 2012. Contrato para la formación y el aprendizaje.
Comparación normativa 1998 y 2012. Contrato para la formación y el aprendizaje.Comparación normativa 1998 y 2012. Contrato para la formación y el aprendizaje.
Comparación normativa 1998 y 2012. Contrato para la formación y el aprendizaje.
Universidad Autónoma de Barcelona
 
Lettre aux auditeurs Rcf26 Septembre 2013
Lettre aux auditeurs Rcf26 Septembre 2013Lettre aux auditeurs Rcf26 Septembre 2013
Lettre aux auditeurs Rcf26 Septembre 2013
Rcf26
 
Les réseaux sociaux (Atelier numérique de Versailles)
Les réseaux sociaux (Atelier numérique de Versailles)Les réseaux sociaux (Atelier numérique de Versailles)
Les réseaux sociaux (Atelier numérique de Versailles)
ateliernumerique
 
Déclaration BDI / MEDEF du 5 février 2014
Déclaration BDI / MEDEF du 5 février 2014Déclaration BDI / MEDEF du 5 février 2014
Déclaration BDI / MEDEF du 5 février 2014
MEDEF - Mouvement des Entreprises de France
 
Le referencement - Pourquoi en prendre soin?
Le referencement - Pourquoi en prendre soin?Le referencement - Pourquoi en prendre soin?
Le referencement - Pourquoi en prendre soin?
Samuel Victor IYABI
 
Journal n°51 Janvier 2012
Journal n°51 Janvier 2012Journal n°51 Janvier 2012
Journal n°51 Janvier 2012
midod
 
Rapport-pacte-compétitivité-gallois
Rapport-pacte-compétitivité-galloisRapport-pacte-compétitivité-gallois
Rapport-pacte-compétitivité-gallois
Le Point
 
Herramientas para twitter
Herramientas para twitterHerramientas para twitter
Herramientas para twitter
Maria Jose
 
Los cinco colores que te darán salud!!
Los cinco colores que te darán salud!!Los cinco colores que te darán salud!!
Los cinco colores que te darán salud!!
Adriana Moreira
 
Diseño una situación de aprendizaje con base en los planteamientos de la didá...
Diseño una situación de aprendizaje con base en los planteamientos de la didá...Diseño una situación de aprendizaje con base en los planteamientos de la didá...
Diseño una situación de aprendizaje con base en los planteamientos de la didá...
moonchris
 
Eos 550 premier tri pps
Eos 550 premier tri ppsEos 550 premier tri pps
Eos 550 premier tri pps
Jean-Pierre Alexandre
 

En vedette (20)

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

Similaire à Ecrire et déployer une appli PHP maintenable

Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
LeTesteur
 
2008-09-30 Administration automatisée avec Powershell
2008-09-30 Administration automatisée avec Powershell2008-09-30 Administration automatisée avec Powershell
2008-09-30 Administration automatisée avec Powershell
Patrick Guimonet
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Normandie Web Xperts
 
Php sous Windows - webcamps Paris
Php sous Windows - webcamps ParisPhp sous Windows - webcamps Paris
Php sous Windows - webcamps Paris
LeTesteur
 
Optimiser WordPress
Optimiser WordPressOptimiser WordPress
Optimiser WordPress
Chi Nacim
 
Optimiser wordpress
Optimiser wordpressOptimiser wordpress
Optimiser wordpress
Jean-François Vial
 
Un site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XPUn site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XP
atelier111
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
PrestaShop
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
ALTER WAY
 
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
GSoft
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
julien pauli
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Société ELOSI
 
Jabes 2015 - Poster SCD Université Nantes : "Une suite d'outils pour l'exempl...
Jabes 2015 - Poster SCD Université Nantes : "Une suite d'outils pour l'exempl...Jabes 2015 - Poster SCD Université Nantes : "Une suite d'outils pour l'exempl...
Jabes 2015 - Poster SCD Université Nantes : "Une suite d'outils pour l'exempl...
ABES
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
Amélie DUVERNET
 
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
Automatiser le déploiement d'environnements SharePoint 2010/2013 grâce à Powe...
Franck Cornu
 
Techdays2011
Techdays2011 Techdays2011
Techdays2011
ALTER WAY
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
Christophe HERAL
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5
Microsoft
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv Ps
Gregory Renard
 

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

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

Plus de Christophe Villeneuve

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

Plus de Christophe Villeneuve (20)

MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 
La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans Firefox
 
pister les pisteurs
pister les pisteurspister les pisteurs
pister les pisteurs
 
controler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webcontroler vos donnees éthiques dans le web
controler vos donnees éthiques dans le web
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Mariadb une base de données NewSQL
Mariadb une base de données NewSQLMariadb une base de données NewSQL
Mariadb une base de données NewSQL
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnante
 
Pentest bus pirate
Pentest bus piratePentest bus pirate
Pentest bus pirate
 
Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?
 
La sécurité applicative par le design
La sécurité applicative par le designLa sécurité applicative par le design
La sécurité applicative par le design
 
Foxfooding semaine 3
Foxfooding semaine 3Foxfooding semaine 3
Foxfooding semaine 3
 
Foxfooding
FoxfoodingFoxfooding
Foxfooding
 
Accessibilite web wcag rgaa
Accessibilite web wcag rgaaAccessibilite web wcag rgaa
Accessibilite web wcag rgaa
 
Mozilla french speaking community activites
Mozilla french speaking community activitesMozilla french speaking community activites
Mozilla french speaking community activites
 
Monitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftMonitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et Microsoft
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthn
 
Send large files with addons
Send large files with addonsSend large files with addons
Send large files with addons
 
Tests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueTests d'accessibilite par la pratique
Tests d'accessibilite par la pratique
 
Donnez la voix aux machines
Donnez la voix aux machinesDonnez la voix aux machines
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