php : écrire et déployer des applications maintenables !
DESCRIPTION
Microsoft s'est intéressé de plus en plus à l'écosystème PHP ces dernières années afin de lui offrir un accueil de choix. Christophe Villeneuve et Pierre Couzy feront le tour des bonnes habitudes à acquérir, notamment les aspects spécifiques à Windows. Paramétrage, sécurité, déploiement, extensions, outils, ORM, etc. Session interactive, venez avec vos questions !TRANSCRIPT
![Page 1: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/1.jpg)
Christophe VilleneuveConsultant PHP
Alter Way
Ecrire et déployer une appli PHP maintenable
Pierre CouzyRelation technique FLOSS
Microsoft
7 Février 2012
![Page 2: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/2.jpg)
Pourquoi nous ?
Christophe Villeneuve Pierre Couzy
![Page 3: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/3.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/4.jpg)
Les incontournablesOutilsRuntimeExtensions
Code et dépendances ParamétrageLes donnéesLes autres points
La productionLe serveurL’optimisationLe cacheLe déploiement
Par où commencer ?
![Page 5: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/5.jpg)
Les incontournables
![Page 6: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/6.jpg)
Les outils
http://www.flickr.com/photos/fruhjk/5145895601/sizes/z/in/photostream/
![Page 7: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/7.jpg)
Les outils
Liés avec le système d'exploitationLinux, 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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/8.jpg)
Le runtime
![Page 9: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/9.jpg)
La version de PHP
PHP 5.3 & +PHP 5.2
![Page 10: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/10.jpg)
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équences
Le graal : recetter l'application sur une nouvelle versionLa vraie vie : Figer une version de PHP en prod
![Page 11: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/11.jpg)
PHP 5.4Comment s'y préparer ?
Un overview des nouveautés et différencesServeur HTTP → php -S localhost:8000Les 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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/12.jpg)
Les extensions
![Page 13: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/13.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/14.jpg)
ExtensionsInstaller PHP sans extensionsActiver le reportingAjouter le strict minimumMettez php.ini au carré
Ne pas jeter
Les extensions inutiles
![Page 15: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/15.jpg)
![Page 16: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/16.jpg)
Gestion versions/extensions
Ça reste un problème délicat
![Page 17: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/17.jpg)
phpinfo()
A vérifier sur la bécane de développement et après mise en prod et à garder dans les docs
![Page 18: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/18.jpg)
L'application
OK, peut-être que tout n’est pas écrit en PHP dans cette illustration.
![Page 19: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/19.jpg)
Paramétrage
![Page 20: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/20.jpg)
Le paramétrage
© symfony
![Page 21: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/21.jpg)
Regrouper les paramètres
© Wordpress
![Page 22: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/22.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/23.jpg)
Les données
![Page 24: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/24.jpg)
Base de donnéesLe minimumUne couche technique
d'abstractionUn référentiel pour les
requêtes custom
PDOPas complet
Une parenthèse sur les ORM ?
NoSQL ?
![Page 25: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/25.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/26.jpg)
NoSQL ?
PourMonté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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/27.jpg)
Les autres points
![Page 28: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/28.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/29.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/30.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/31.jpg)
Production & perfs
![Page 32: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/32.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/33.jpg)
De CGI à FastCGI
![Page 34: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/34.jpg)
Et ça marche ?
http://forge.bearstech.com/trac/wiki/DebianLampLenny
![Page 35: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/35.jpg)
OptimisationOptimiser c'est malEn DEVAvant la mise en prodPar copier / coller des trucs sur internet
![Page 36: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/36.jpg)
Gestion du cache Sur le serveurCache 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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/37.jpg)
Le déploiement
![Page 38: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/38.jpg)
Il reste... le déploiement
FTP / FTPsSMTP
Quelques emails Votre hébergeur
Pour du SPAMService dédié et externe (cristend,etc.)
OutilsSendGridSarbacaneEMailing Automate (EMA)
En PHP EmailingphpList
Pour la mise en prod
Exports divers et variés
Reparamétrage
![Page 39: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/39.jpg)
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: PHP : écrire et déployer des applications maintenables !](https://reader035.vdocument.in/reader035/viewer/2022062418/5538a0c34a79591c7b8b47d2/html5/thumbnails/40.jpg)
Merci ! Questions ?
hellosct1