SlideShare une entreprise Scribd logo
1  sur  28
Lucas Bonnet
 Pierre Couzy
◦ Dans le temps

◦ Dans l’environnement d’exécution

◦ Dans les évolutions
   Les prérequis ?
    ◦ Le runtime PHP
    ◦ Les extensions
    ◦ Logging
   L’appli ?
    ◦ Paramétrage
    ◦ La base de données
    ◦ Les autres données
   La prod ?
    ◦ Le serveur
    ◦ Les caches
    ◦ Retour sur la base de données
   Le déploiement
Un premier impact sur les versions majeures
     Fonctions obsolètes
     Vieux workarounds qui cessent de fonctionner
     Nouveaux bugs

Mais aussi sur les versions mineures
     Corrections apportées suite à l’analyse par CoVerity
     Gestion d’erreur parfois subtilement différente
     Exemples : Eval, PDO

Et enfin selon l’OS
     Profil de perf TRES différent entre 5.2 et 5.3 sous Windows

Le choix du runtime va avoir de très grosses conséquences
     Soit on fige une version de PHP en prod
     Soit on sait recetter l’appli sur une nouvelle version de …
   Installez php sans extensions
   Activez le reporting
   Ajoutez le strict minimum
   Mettez php.ini au carré

   Ne jetez pas les extensions
    qui ne vous servent pas ?
    ◦ On est pas d’accord sur le sujet.
   Calendar : installé ou pas ?
   Mb_string : en mod_php sur 5.2 en mutu, si
    des sites activent mb_string les autres en
    “profitent”
   Au fait, quand on ajoute une
    extension à une install existante,
    on prend quelle version ?
   Un cauchemar particulier sous Windows
    ◦ Prenez les versions VC9 NTS pour IIS, et VC6 TS
      pour Apache
   À faire sur la bécane de dev et après chaque
    mise en prod et à garder dans les docs
   Les composants tiers (FW, plugins, etc.)
   Les paramètres de déploiement
   Les paramètres de fonctionnement
   L’adhérence à la base de données
   Le filesystem
   Etc.
   Des 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
   Le minimum syndical
    ◦ Une couche technique d’abstraction
    ◦ Un référentiel pour les requêtes custom

   PDO
    ◦ Pas complet, mais on a pas mieux.

   Une parenthèse sur les ORM
   A votre avis ?

    ◦   Images uploadées
    ◦   Sessions
    ◦   Fichiers auto-générés
    ◦   Logs
    ◦   Code uploadé par un admin (depuis l’IHM Web)
   Quelques questions simples
    ◦   Conventions ?
    ◦   Permissions ?
    ◦   Abstraction ? (wrappers etc)
    ◦   Limites à comprendre
         Nb de fichiers/folders par …
         Limites sur un nom de fichier ?
         Permissions sur répertoires : pas toujours dispo
   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
   Les 5 principales causes couvrent 86% des
    attaques recensées
   Comment se couvrir ?
   Coverity
   Php lint
   Séparez 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 faite par code
   C’est quoi l’adresse de ton SMTP ?
    ◦ Si c’est pour quelques mails l’hébergeur peut
      éventuellement le fournir
    ◦ Si c’est pour spammer on passe par un service
      dédié et externe (critsend, etc.)
   Tu peux m’ouvrir un accès FTP ?
    ◦ Pour de la mise en prod ?
    ◦ Pour de la mise à dispo d’exports divers et variés
    ◦ Pour du reparamétrage
   Profils de charge inattendus
    ◦ Un appel synchrone à FB oublié dans un coin sur la
      home
   La base s’éloigne
    ◦ Lag qui passe de 1 à 10 ms
   Saturations disque / RAM / réseau
   Oui, j’ai laissé l’historique dans la
    base, pourquoi tu demandes ça ?
Un process par                           Chargement de                 Gestion d’un pool




                                                                   FastCGI
                             ISAPI & mod-php
CGI

      requête                                  PHP in-process                de process
                                               (surrogate IIS ou
                                               process Apache)

      Avantage                                 Avantage                      Avantages
      • Très stable                            • Très performant             • Plus rapide que CGI
                                                                             • Plus stable
      Inconvénient                             Inconvénients                   qu’ISAPI/mod_php
                                                                             • Permet de
      • *Très* lent sous                       • Stabilité                     fonctionner sans
        Windows (coût                          • Réentrance                    réentrance
        énorme de création
        d’un process)
http://forge.bearstech.com/trac/wiki/DebianLampLenny
   Optimiser, c’est mal
    ◦ En dev
      Avant la mise en prod
        Par copier/coller de trucs sur internet
   Sur la bécane
    ◦   Cache d’opcode
    ◦   Cache de résolution dns/filesystem
    ◦   User code ?
    ◦   Caches de rendu divers et variés
    ◦   Cache de bdd
   Entre bécanes
    ◦ Sessions dans memcache/redis/..
   Au cul des bécanes
    ◦ Varnish (cookie de session anyone ?)
   Tables à croissance infinie
   Requêtes non cachées
   Requêtes impliquant un table scan
   Select * from MyHugeNewsTable
    … Order by rand()
   Fonctionnellement, une jointure est équivalente à
    une boucle.
   Les BDD savent optimiser les requêtes identiques
    (par exemple les requêtes paramétrées)
    ◦ Il y toujours PDO::ATTR_EMULATE_PREPARES si vous en
      avez besoin
   Mon premier déploiement
    ◦ Coupez le réseau de la machine du développeur et
      filez-lui une clé USB.
   Pour les suivants, automatisez
    ◦ Aujourd’hui ce n’est pas la norme

    … Et on est polis

   Un contrôleur de source ça peut garder plein
    de trucs
    ◦ Y compris une appli qui n’est pas sous contrôle de
      source avant l’arrivée en prod
Développer et déployer une application php maintenable

Contenu connexe

Tendances

Introduction à eZ Publish Platform 5.3
Introduction à eZ Publish Platform 5.3 Introduction à eZ Publish Platform 5.3
Introduction à eZ Publish Platform 5.3 Roland Benedetti
 
Power shell saturday Paris 2017 Omiossec
Power shell saturday  Paris 2017 OmiossecPower shell saturday  Paris 2017 Omiossec
Power shell saturday Paris 2017 OmiossecOlivier Miossec
 
Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval
Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval
Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval Romain Sauger
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010JUG Lausanne
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs13p
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetOlivier BAZOUD
 
Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Aurelien Navarre
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015gaelmetais
 
Frameworks : A history of violence
Frameworks : A history of violenceFrameworks : A history of violence
Frameworks : A history of violenceFrancois Zaninotto
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOpsJeoffrey Bauvin
 
Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013Alain Ganuchaud
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ? haricot
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012FastConnect
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Guillaume Sautereau
 
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.wplyon
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3Nicolas Lœuillet
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
A la queue leu leu
A la queue leu leuA la queue leu leu
A la queue leu leunautilebleu
 

Tendances (20)

Introduction à eZ Publish Platform 5.3
Introduction à eZ Publish Platform 5.3 Introduction à eZ Publish Platform 5.3
Introduction à eZ Publish Platform 5.3
 
Power shell saturday Paris 2017 Omiossec
Power shell saturday  Paris 2017 OmiossecPower shell saturday  Paris 2017 Omiossec
Power shell saturday Paris 2017 Omiossec
 
Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval
Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval
Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 
Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015
 
Frameworks : A history of violence
Frameworks : A history of violenceFrameworks : A history of violence
Frameworks : A history of violence
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOps
 
Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
 
Livre blanc docker
Livre blanc docker Livre blanc docker
Livre blanc docker
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010
 
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
A la queue leu leu
A la queue leu leuA la queue leu leu
A la queue leu leu
 

En vedette

BDD avec Behat, PhpSpec et Symfony2
BDD avec Behat, PhpSpec et Symfony2BDD avec Behat, PhpSpec et Symfony2
BDD avec Behat, PhpSpec et Symfony2Mohammed Rhamnia
 
Génération d'applications web avec Bonita
Génération d'applications web avec BonitaGénération d'applications web avec Bonita
Génération d'applications web avec Bonitarlg
 
RevisionPerspectivas futuras en el tratamiento de la hepatitis crónica C
RevisionPerspectivas futuras en el tratamiento de la hepatitis crónica CRevisionPerspectivas futuras en el tratamiento de la hepatitis crónica C
RevisionPerspectivas futuras en el tratamiento de la hepatitis crónica CAsociación Lazos Pro Solidariedade
 
A quoi va ressembler le projet spo tumblr
A quoi va ressembler le projet spo tumblrA quoi va ressembler le projet spo tumblr
A quoi va ressembler le projet spo tumblraureliegarrigues
 
Présentation Carrefour des Créateurs 1.11.11
Présentation Carrefour des Créateurs 1.11.11Présentation Carrefour des Créateurs 1.11.11
Présentation Carrefour des Créateurs 1.11.11Valérie Demont (-Steck)
 
Citizen act comment faire du buzz_2011_2012
Citizen act comment faire du buzz_2011_2012Citizen act comment faire du buzz_2011_2012
Citizen act comment faire du buzz_2011_2012CITIZEN ACT
 
Categorias del concepto de personas
Categorias del concepto de personasCategorias del concepto de personas
Categorias del concepto de personasnecave
 
Présentation pesée embarquée 2011
Présentation pesée embarquée 2011Présentation pesée embarquée 2011
Présentation pesée embarquée 2011Quidam07
 
15 conseils que j’aurais aimé avoir en début de carrière
15 conseils que j’aurais aimé avoir en début de carrière15 conseils que j’aurais aimé avoir en début de carrière
15 conseils que j’aurais aimé avoir en début de carrièreCharles Beauchemin
 
Baobaz SES - La semaine sociale 281111
Baobaz SES - La semaine sociale 281111Baobaz SES - La semaine sociale 281111
Baobaz SES - La semaine sociale 281111armstrong
 
Régimen de Autonomías, naturaleza y atribuciones
Régimen de Autonomías, naturaleza y atribucionesRégimen de Autonomías, naturaleza y atribuciones
Régimen de Autonomías, naturaleza y atribucionesGobernabilidad
 
Citizen act fr_protocole_de_kyoto
Citizen act fr_protocole_de_kyotoCitizen act fr_protocole_de_kyoto
Citizen act fr_protocole_de_kyotoCITIZEN ACT
 
La comunicacion
La comunicacionLa comunicacion
La comunicacionJuan José
 
DAHIR DROIT D'ASSOCIATION - Maroc
DAHIR DROIT D'ASSOCIATION - MarocDAHIR DROIT D'ASSOCIATION - Maroc
DAHIR DROIT D'ASSOCIATION - MarocGHASSAN LEMSSADDAK
 

En vedette (20)

BDD avec Behat, PhpSpec et Symfony2
BDD avec Behat, PhpSpec et Symfony2BDD avec Behat, PhpSpec et Symfony2
BDD avec Behat, PhpSpec et Symfony2
 
Génération d'applications web avec Bonita
Génération d'applications web avec BonitaGénération d'applications web avec Bonita
Génération d'applications web avec Bonita
 
Contenido laboral del Reglamento de extranjería.
Contenido laboral del Reglamento de extranjería. Contenido laboral del Reglamento de extranjería.
Contenido laboral del Reglamento de extranjería.
 
RevisionPerspectivas futuras en el tratamiento de la hepatitis crónica C
RevisionPerspectivas futuras en el tratamiento de la hepatitis crónica CRevisionPerspectivas futuras en el tratamiento de la hepatitis crónica C
RevisionPerspectivas futuras en el tratamiento de la hepatitis crónica C
 
A quoi va ressembler le projet spo tumblr
A quoi va ressembler le projet spo tumblrA quoi va ressembler le projet spo tumblr
A quoi va ressembler le projet spo tumblr
 
Présentation Carrefour des Créateurs 1.11.11
Présentation Carrefour des Créateurs 1.11.11Présentation Carrefour des Créateurs 1.11.11
Présentation Carrefour des Créateurs 1.11.11
 
Citizen act comment faire du buzz_2011_2012
Citizen act comment faire du buzz_2011_2012Citizen act comment faire du buzz_2011_2012
Citizen act comment faire du buzz_2011_2012
 
Categorias del concepto de personas
Categorias del concepto de personasCategorias del concepto de personas
Categorias del concepto de personas
 
Mayores tic
Mayores ticMayores tic
Mayores tic
 
Présentation pesée embarquée 2011
Présentation pesée embarquée 2011Présentation pesée embarquée 2011
Présentation pesée embarquée 2011
 
Atelier Vesuviani - Projet Combiniamoci - Intervention Virginia Scamardella
Atelier Vesuviani - Projet Combiniamoci - Intervention Virginia ScamardellaAtelier Vesuviani - Projet Combiniamoci - Intervention Virginia Scamardella
Atelier Vesuviani - Projet Combiniamoci - Intervention Virginia Scamardella
 
15 conseils que j’aurais aimé avoir en début de carrière
15 conseils que j’aurais aimé avoir en début de carrière15 conseils que j’aurais aimé avoir en début de carrière
15 conseils que j’aurais aimé avoir en début de carrière
 
Presentación del VI Encuentro Conecta Joven
Presentación del VI Encuentro Conecta JovenPresentación del VI Encuentro Conecta Joven
Presentación del VI Encuentro Conecta Joven
 
Baobaz SES - La semaine sociale 281111
Baobaz SES - La semaine sociale 281111Baobaz SES - La semaine sociale 281111
Baobaz SES - La semaine sociale 281111
 
Régimen de Autonomías, naturaleza y atribuciones
Régimen de Autonomías, naturaleza y atribucionesRégimen de Autonomías, naturaleza y atribuciones
Régimen de Autonomías, naturaleza y atribuciones
 
Citizen act fr_protocole_de_kyoto
Citizen act fr_protocole_de_kyotoCitizen act fr_protocole_de_kyoto
Citizen act fr_protocole_de_kyoto
 
La comunicacion
La comunicacionLa comunicacion
La comunicacion
 
DAHIR DROIT D'ASSOCIATION - Maroc
DAHIR DROIT D'ASSOCIATION - MarocDAHIR DROIT D'ASSOCIATION - Maroc
DAHIR DROIT D'ASSOCIATION - Maroc
 
Los amigos
Los amigosLos amigos
Los amigos
 
Ejemplo de fraccionarios
Ejemplo de fraccionariosEjemplo de fraccionarios
Ejemplo de fraccionarios
 

Similaire à Développer et déployer une application php maintenable

Ecrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableEcrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableChristophe Villeneuve
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017AFUP_Limoges
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Meetup du 21 septembre 2017
Meetup du 21 septembre 2017Meetup du 21 septembre 2017
Meetup du 21 septembre 2017AFUP_Limoges
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Cellenza
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Microsoft
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxMarc Bojoly
 
Php sous Windows - webcamps Paris
Php sous Windows - webcamps ParisPhp sous Windows - webcamps Paris
Php sous Windows - webcamps ParisLeTesteur
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
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'XPatelier111
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005Eric D.
 
resume-theorique-m202-v1-0-6308e0082c37c (3).pdf
resume-theorique-m202-v1-0-6308e0082c37c (3).pdfresume-theorique-m202-v1-0-6308e0082c37c (3).pdf
resume-theorique-m202-v1-0-6308e0082c37c (3).pdfFootballLovers9
 
l'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectl'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectFlorent DENIS
 
Alphorm.com Formation Apache - Le Guide Complet de l'administrateur
Alphorm.com Formation Apache - Le Guide Complet de l'administrateurAlphorm.com Formation Apache - Le Guide Complet de l'administrateur
Alphorm.com Formation Apache - Le Guide Complet de l'administrateurAlphorm
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfboulonvert
 
Game of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesGame of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesQuang Tu LE
 

Similaire à Développer et déployer une application php maintenable (20)

Ecrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableEcrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenable
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Meetup du 21 septembre 2017
Meetup du 21 septembre 2017Meetup du 21 septembre 2017
Meetup du 21 septembre 2017
 
Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptx
 
Php sous Windows - webcamps Paris
Php sous Windows - webcamps ParisPhp sous Windows - webcamps Paris
Php sous Windows - webcamps Paris
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
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
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005
 
resume-theorique-m202-v1-0-6308e0082c37c (3).pdf
resume-theorique-m202-v1-0-6308e0082c37c (3).pdfresume-theorique-m202-v1-0-6308e0082c37c (3).pdf
resume-theorique-m202-v1-0-6308e0082c37c (3).pdf
 
l'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectl'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnect
 
Alphorm.com Formation Apache - Le Guide Complet de l'administrateur
Alphorm.com Formation Apache - Le Guide Complet de l'administrateurAlphorm.com Formation Apache - Le Guide Complet de l'administrateur
Alphorm.com Formation Apache - Le Guide Complet de l'administrateur
 
Ocs
OcsOcs
Ocs
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
Formation Google App Engine
Formation Google App EngineFormation Google App Engine
Formation Google App Engine
 
Game of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesGame of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de données
 

Plus de LeTesteur

EventMachine
EventMachineEventMachine
EventMachineLeTesteur
 
RxJs - Reactive Extensions for JavaScript
RxJs - Reactive Extensions for JavaScriptRxJs - Reactive Extensions for JavaScript
RxJs - Reactive Extensions for JavaScriptLeTesteur
 
Drupal en environnement microsoft
Drupal en environnement microsoftDrupal en environnement microsoft
Drupal en environnement microsoftLeTesteur
 
Web dev open door
Web dev   open doorWeb dev   open door
Web dev open doorLeTesteur
 
Joomla Days 2011 Lyon
Joomla Days 2011 LyonJoomla Days 2011 Lyon
Joomla Days 2011 LyonLeTesteur
 
Drupal in the cloud with Windows Azure
Drupal in the cloud with Windows AzureDrupal in the cloud with Windows Azure
Drupal in the cloud with Windows AzureLeTesteur
 
Web Matrix (Microsoft WebCamps Paris)
Web Matrix (Microsoft WebCamps Paris)Web Matrix (Microsoft WebCamps Paris)
Web Matrix (Microsoft WebCamps Paris)LeTesteur
 
PHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoftPHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoftLeTesteur
 
Eclipse day paris
Eclipse day parisEclipse day paris
Eclipse day parisLeTesteur
 
Reactive programming for javascript
Reactive programming for javascriptReactive programming for javascript
Reactive programming for javascriptLeTesteur
 
Comment approcherlecloud
Comment approcherlecloudComment approcherlecloud
Comment approcherlecloudLeTesteur
 
What linq is about
What linq is aboutWhat linq is about
What linq is aboutLeTesteur
 

Plus de LeTesteur (12)

EventMachine
EventMachineEventMachine
EventMachine
 
RxJs - Reactive Extensions for JavaScript
RxJs - Reactive Extensions for JavaScriptRxJs - Reactive Extensions for JavaScript
RxJs - Reactive Extensions for JavaScript
 
Drupal en environnement microsoft
Drupal en environnement microsoftDrupal en environnement microsoft
Drupal en environnement microsoft
 
Web dev open door
Web dev   open doorWeb dev   open door
Web dev open door
 
Joomla Days 2011 Lyon
Joomla Days 2011 LyonJoomla Days 2011 Lyon
Joomla Days 2011 Lyon
 
Drupal in the cloud with Windows Azure
Drupal in the cloud with Windows AzureDrupal in the cloud with Windows Azure
Drupal in the cloud with Windows Azure
 
Web Matrix (Microsoft WebCamps Paris)
Web Matrix (Microsoft WebCamps Paris)Web Matrix (Microsoft WebCamps Paris)
Web Matrix (Microsoft WebCamps Paris)
 
PHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoftPHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoft
 
Eclipse day paris
Eclipse day parisEclipse day paris
Eclipse day paris
 
Reactive programming for javascript
Reactive programming for javascriptReactive programming for javascript
Reactive programming for javascript
 
Comment approcherlecloud
Comment approcherlecloudComment approcherlecloud
Comment approcherlecloud
 
What linq is about
What linq is aboutWhat linq is about
What linq is about
 

Développer et déployer une application php maintenable

  • 2.
  • 3. ◦ Dans le temps ◦ Dans l’environnement d’exécution ◦ Dans les évolutions
  • 4. Les prérequis ? ◦ Le runtime PHP ◦ Les extensions ◦ Logging  L’appli ? ◦ Paramétrage ◦ La base de données ◦ Les autres données  La prod ? ◦ Le serveur ◦ Les caches ◦ Retour sur la base de données  Le déploiement
  • 5. Un premier impact sur les versions majeures  Fonctions obsolètes  Vieux workarounds qui cessent de fonctionner  Nouveaux bugs Mais aussi sur les versions mineures  Corrections apportées suite à l’analyse par CoVerity  Gestion d’erreur parfois subtilement différente  Exemples : Eval, PDO Et enfin selon l’OS  Profil de perf TRES différent entre 5.2 et 5.3 sous Windows Le choix du runtime va avoir de très grosses conséquences  Soit on fige une version de PHP en prod  Soit on sait recetter l’appli sur une nouvelle version de …
  • 6. Installez php sans extensions  Activez le reporting  Ajoutez le strict minimum  Mettez php.ini au carré  Ne jetez pas les extensions qui ne vous servent pas ? ◦ On est pas d’accord sur le sujet.
  • 7. Calendar : installé ou pas ?  Mb_string : en mod_php sur 5.2 en mutu, si des sites activent mb_string les autres en “profitent”  Au fait, quand on ajoute une extension à une install existante, on prend quelle version ?  Un cauchemar particulier sous Windows ◦ Prenez les versions VC9 NTS pour IIS, et VC6 TS pour Apache
  • 8.
  • 9. À faire sur la bécane de dev et après chaque mise en prod et à garder dans les docs
  • 10. Les composants tiers (FW, plugins, etc.)  Les paramètres de déploiement  Les paramètres de fonctionnement  L’adhérence à la base de données  Le filesystem  Etc.
  • 11.
  • 12.
  • 13. Des 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
  • 14. Le minimum syndical ◦ Une couche technique d’abstraction ◦ Un référentiel pour les requêtes custom  PDO ◦ Pas complet, mais on a pas mieux.  Une parenthèse sur les ORM
  • 15. A votre avis ? ◦ Images uploadées ◦ Sessions ◦ Fichiers auto-générés ◦ Logs ◦ Code uploadé par un admin (depuis l’IHM Web)
  • 16. Quelques questions simples ◦ Conventions ? ◦ Permissions ? ◦ Abstraction ? (wrappers etc) ◦ Limites à comprendre  Nb de fichiers/folders par …  Limites sur un nom de fichier ?  Permissions sur répertoires : pas toujours dispo
  • 17. 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
  • 18. Les 5 principales causes couvrent 86% des attaques recensées  Comment se couvrir ?  Coverity  Php lint
  • 19. Séparez 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 faite par code
  • 20. C’est quoi l’adresse de ton SMTP ? ◦ Si c’est pour quelques mails l’hébergeur peut éventuellement le fournir ◦ Si c’est pour spammer on passe par un service dédié et externe (critsend, etc.)  Tu peux m’ouvrir un accès FTP ? ◦ Pour de la mise en prod ? ◦ Pour de la mise à dispo d’exports divers et variés ◦ Pour du reparamétrage
  • 21. Profils de charge inattendus ◦ Un appel synchrone à FB oublié dans un coin sur la home  La base s’éloigne ◦ Lag qui passe de 1 à 10 ms  Saturations disque / RAM / réseau  Oui, j’ai laissé l’historique dans la base, pourquoi tu demandes ça ?
  • 22. Un process par Chargement de Gestion d’un pool FastCGI ISAPI & mod-php CGI requête PHP in-process de process (surrogate IIS ou process Apache) Avantage Avantage Avantages • Très stable • Très performant • Plus rapide que CGI • Plus stable Inconvénient Inconvénients qu’ISAPI/mod_php • Permet de • *Très* lent sous • Stabilité fonctionner sans Windows (coût • Réentrance réentrance énorme de création d’un process)
  • 24. Optimiser, c’est mal ◦ En dev  Avant la mise en prod  Par copier/coller de trucs sur internet
  • 25. Sur la bécane ◦ Cache d’opcode ◦ Cache de résolution dns/filesystem ◦ User code ? ◦ Caches de rendu divers et variés ◦ Cache de bdd  Entre bécanes ◦ Sessions dans memcache/redis/..  Au cul des bécanes ◦ Varnish (cookie de session anyone ?)
  • 26. Tables à croissance infinie  Requêtes non cachées  Requêtes impliquant un table scan  Select * from MyHugeNewsTable … Order by rand()  Fonctionnellement, une jointure est équivalente à une boucle.  Les BDD savent optimiser les requêtes identiques (par exemple les requêtes paramétrées) ◦ Il y toujours PDO::ATTR_EMULATE_PREPARES si vous en avez besoin
  • 27. Mon premier déploiement ◦ Coupez le réseau de la machine du développeur et filez-lui une clé USB.  Pour les suivants, automatisez ◦ Aujourd’hui ce n’est pas la norme … Et on est polis  Un contrôleur de source ça peut garder plein de trucs ◦ Y compris une appli qui n’est pas sous contrôle de source avant l’arrivée en prod

Notes de l'éditeur

  1. Voir comment phpparse ses includes