40
Christophe Villeneuve Consultant PHP Alter Way Ecrire et déployer une appli PHP maintenable Pierre Couzy Relation technique FLOSS Microsoft 7 Février 2012

Ecrire et déployer une appli PHP maintenable

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Ecrire et déployer une appli PHP maintenable

Christophe VilleneuveConsultant PHP

Alter Way

Ecrire et déployer une appli PHP maintenable

Pierre CouzyRelation technique FLOSS

Microsoft

7 Février 2012

Page 2: Ecrire et déployer une appli PHP maintenable

Pourquoi nous ?

Christophe Villeneuve Pierre Couzy

Page 3: Ecrire et déployer une appli PHP maintenable

Select login from user where id=31

Select password from user where id=31

If (password === pwd) select …

Machin = select toto from …

If ! cache(« machin ») Cache(« machin ») = Machin

blabla

Un petit quiz ?

Select * from MaTable order by rand()

C’est corrigé ?Oui.Testé ?Oui, la page fonctionne au poilBon, on déploie !

Page 4: Ecrire et déployer une appli PHP maintenable

Les incontournablesOutilsRuntimeExtensions

Code et dépendances ParamétrageLes donnéesLes autres points

La productionLe serveurL’optimisationLe cacheLe déploiement

Par où commencer ?

Page 5: Ecrire et déployer une appli PHP maintenable

Les incontournables

Page 6: Ecrire et déployer une appli PHP maintenable

Les outils

http://www.flickr.com/photos/fruhjk/5145895601/sizes/z/in/photostream/

Page 7: Ecrire et déployer une appli PHP maintenable

Les outilsLié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)

Page 8: Ecrire et déployer une appli PHP maintenable

Le runtime

Page 9: Ecrire et déployer une appli PHP maintenable

La version de PHPPHP 5.3 & +PHP 5.2

Page 10: Ecrire et déployer une appli PHP maintenable

La version de PHPL'OS

Profil de performance différent entre les différentes versions PHP

(5.2 et 5.3 pour windows)

Impact sur les versions majeuresFonctions obsolètesVieux workarounds qui cessent de fonctionnerNouveaux bugs

Impact sur les versions mineuresCorrections apportées suite à l'analyse par CoVerityGestion d'erreurs parfois subtilement différenteExemples : Eval / PDO

Choix du runtime va avoir de grosses conséquencesLe graal : recetter l'application sur une nouvelle versionLa vraie vie : Figer une version de PHP en prod

Page 11: Ecrire et déployer une appli PHP maintenable

PHP 5.4Comment s'y préparer ?

Un overview des nouveautés et différencesServeur HTTP php -S localhost:8000→Les traitsE_STRICT couvert par error_reporting (E_ALL)

L'impact sur vos applicationsEvolutions des ARRAYsEconomie de mémoire en désactivant

des données venant de $_POST

L'impact sur windows

Page 12: Ecrire et déployer une appli PHP maintenable

Les extensions

Page 13: Ecrire et déployer une appli PHP maintenable

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 IISVC 6 TS (Apache) : NON, stop, laissez tomber !

Page 14: Ecrire et déployer une appli PHP maintenable

ExtensionsInstaller PHP sans extensionsActiver le reportingAjouter le strict minimumMettez php.ini au carré

Ne pas jeter

Les extensions inutiles

Page 15: Ecrire et déployer une appli PHP maintenable
Page 16: Ecrire et déployer une appli PHP maintenable

Gestion versions/extensions

Ça reste un problème délicat

Page 17: Ecrire et déployer une appli PHP maintenable

phpinfo()A vérifier sur la bécane de développement

et après mise en prod et à garder dans les docs

Page 18: Ecrire et déployer une appli PHP maintenable

L'application

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

Page 19: Ecrire et déployer une appli PHP maintenable

Paramétrage

Page 20: Ecrire et déployer une appli PHP maintenable

Le paramétrage

© symfony

Page 21: Ecrire et déployer une appli PHP maintenable

Regrouper les paramètres

© Wordpress 

Page 22: Ecrire et déployer une appli PHP maintenable

A retenirParamè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

Page 23: Ecrire et déployer une appli PHP maintenable

Les données

Page 24: Ecrire et déployer une appli PHP maintenable

Base de donnéesLe minimum

Une couche technique d'abstraction

Un référentiel pour les requêtes custom

PDOPas complet

Une parenthèse sur les ORM ?

NoSQL ?

Page 25: Ecrire et déployer une appli PHP maintenable

ORM ou pas ORM ?Les gros :

Doctrine, Propel

Les petits :Micro-ORMKohana, Paris, ADODB

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

Aucun ORM = plein de problèmes

Page 26: Ecrire et déployer une appli PHP maintenable

NoSQL  ?Pour

Montée en charge séduisanteGestion de déploiement familière

ContreQui s’y frotte …

Pour en savoir plus remontez dans le temps

(session était à 13h00)

Page 27: Ecrire et déployer une appli PHP maintenable

Les autres points

Page 28: Ecrire et déployer une appli PHP maintenable

Mise à jourPage offline pour MAJ

au lieu de couper le serveur et de manger des 404...

Stratégie de mise à jourSéparer les donnéesUGCDonnées de structure / modules / etc

Exemple : Drupal (un nouveau module)Le filesystemLa base de donnéesMême sans contenus utilisateurL'upgrade est fait par code

Page 29: Ecrire et déployer une appli PHP maintenable

Log,trace,instrumentation ? Fichiers auto-générés Vignettes Sessions Paramétrage des logs

Log errors = onDisplay_errors = offE_STRICT (!!)E_ALLE_DEPRECATEDE_NOTICE

Page 30: Ecrire et déployer une appli PHP maintenable

Sécurité 5 premiers trous => 86% en 2010

InjectionCross Site Scripting (XSS)Violation d'authentification et de sessionRéférences directes non sécurisées à un objetFalsification de requête intersite (CSRF)

Comment se protéger ?Vega (http://subgraph.com)PHP Lint (http://www.icosaedro.it/phplint/)

Page 31: Ecrire et déployer une appli PHP maintenable

Production & perfs

Page 32: Ecrire et déployer une appli PHP maintenable

Montée en chargeRéseau

Temps de réponse plus long

→ Lag qui passe de 1 à 10 ms

Base de données

L'historique est dans la base de données

→ Pourquoi la question ?

Code

Profils de charge inattendus

→ Un appel synchrone à FB oublié sur la Home Page

Matériel

Quelques mégas sur disque,

→ c'est raisonnable ?

Page 33: Ecrire et déployer une appli PHP maintenable

De CGI à FastCGI

Page 34: Ecrire et déployer une appli PHP maintenable

Et ça marche ?

http://forge.bearstech.com/trac/wiki/DebianLampLenny

Page 35: Ecrire et déployer une appli PHP maintenable

OptimisationOptimiser c'est mal

En DEVAvant la mise en prodPar copier / coller des trucs sur internet

Page 36: Ecrire et déployer une appli PHP maintenable

Gestion du cache Sur le serveur

Cache d'opcodeCache de résolution dns/filesystemUser code ?Caches de rendu divers et variésCache de Base de données

Entre bécancesSession dans APC / Memcache...

Au cul des bécances Varnish / Akamaï (Session de cookie ?)

Page 37: Ecrire et déployer une appli PHP maintenable

Le déploiement

Page 38: Ecrire et déployer une appli PHP maintenable

Il reste... le déploiementFTP / FTPsSMTP

Quelques emails Votre hébergeur

Pour du SPAM Service dédié et externe

(cristend,etc.)

Outils SendGrid Sarbacane EMailing Automate (EMA)

En PHP Emailing phpList

Pour la mise en prod

Exports divers et variés

Reparamétrage

Page 39: Ecrire et déployer une appli PHP maintenable

Conclusion Automatiser la chaine de build

Tout ce qui a été vu avantUne passe sur l'analyseur statique de codeUne passe sur le générateur de docUn rapport et tagger la version dans le contrôleur

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

Tout livrer et documenter l'installation

Page 40: Ecrire et déployer une appli PHP maintenable

Merci ! Questions ?

hellosct1