ecrire et déployer une appli php maintenable
Post on 29-Nov-2014
982 Views
Preview:
DESCRIPTION
TRANSCRIPT
Christophe VilleneuveConsultant PHP
Alter Way
Ecrire et déployer une appli PHP maintenable
Pierre CouzyRelation technique FLOSS
Microsoft
7 Février 2012
Pourquoi nous ?
Christophe Villeneuve Pierre Couzy
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 !
Les incontournablesOutilsRuntimeExtensions
Code et dépendances ParamétrageLes donnéesLes autres points
La productionLe serveurL’optimisationLe cacheLe déploiement
Par où commencer ?
Les incontournables
Les outils
http://www.flickr.com/photos/fruhjk/5145895601/sizes/z/in/photostream/
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)
Le runtime
La version de PHPPHP 5.3 & +PHP 5.2
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
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
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 IISVC 6 TS (Apache) : NON, stop, laissez tomber !
ExtensionsInstaller PHP sans extensionsActiver le reportingAjouter le strict minimumMettez php.ini au carré
Ne pas jeter
Les extensions inutiles
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 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
Les données
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 ?
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
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)
Les autres points
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
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
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/)
Production & perfs
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 ?
De CGI à FastCGI
Et ça marche ?
http://forge.bearstech.com/trac/wiki/DebianLampLenny
OptimisationOptimiser c'est mal
En DEVAvant la mise en prodPar copier / coller des trucs sur internet
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 ?)
Le déploiement
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
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
Merci ! Questions ?
hellosct1
top related