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)
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
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 ?
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