PHP et Microsoft,
quoi de neuf ?
Pierre Couzy – Microsoft France
pierre.couzy@microsoft.com
http://blog.couzy.com/
Existe depuis une décennie
Pratiqué – en développement – par la
majorité des développeurs PHP
Et pourtant, Microsoft a longtemps mené
la vie dure à PHP
PHP sur Windows ?
3 objectifs simples :
I. Impliquer (et s’impliquer dans) les
Communautés
II. Garantir le bon fonctionnement des projets
sur les OS Windows
III. Ouvrir nos produits et services à des
environnements traditionnellement non
Microsoft
L'Open Source Technology Center
OSTC : un peu d'histoire …
Commencé en 2004
2 ordinateurs
une seule personne
L'OSTC : aujourd'hui
Hébergé à Redmond
Composé d’experts en
logiciels libres et Linux
Tests d'interopérabilité des logiciels
libres avec des technologies
Windows
Tests de performances de
Windows et de la stack des
logiciels libres
Redmond Open Source Lab
Plus de 400 serveurs de
différents types (Gumstix,
Intel, AMD, Blades, clusters
HPC clusters et des machines
IBM P6)
La disponibilité de plus de 340
distributions Linux
La plus haute densité de calcul
de tous les laboratoires de
Microsoft Redmond
La plateforme Windows pour PHP
Industrialiser une distro PHP
• Certains binaires avaient 12 ans d’âge..
Des librairies hétérogènes
• Certaines librariries n’existaient qu’en
format binaire, d’origine ou de licence
inconnue.
Code source indisponible
• Les librairies n’avaient pas suivi les pratiques
de sécurité depuis 10 ans pour certaines
Pas de mises à jour de sécurité
• Désynchronisation de la version Windows
(pas de mises à jour des fonctionnalités)
Pas de parité fonctionnelle
• Le processus de build est exhaustif et
automatisé.
Recompilation de chaque binaire
• Gestion de sécurité et de fonctionnalités à
parité stricte avec les autres plateformes,
puisqu’on s’appuie sur une souche
commune de source
Gestion des dépendances
• On peut désormais exploiter des outils
modernes d’optimisation de façon
transversale puisque tout le source est
synchronisé.
Retour au source
Passage à Visual C++ 9
•Visual C++ 6.0 a 10 ans et ne sait pas
produire de code adapté au matériel et
systèmes d’exploitation actuels.
Builds VC 6
•PHP sur Windows devenait un projet
obsolète, de moins en moins de gens
utilisant VC6
Un Compilo obsolète
•Limitation de VC6
Pas de 64 bit
•Un assemblage disparate et peu robuste
Sécurité ?
• VC9 permet de compiler pour les
OS et architectures actuelles
Builds VC 9
• Optimisations classiques du
compilateur mais aussi des
techniques nouvelles (PGO)
Un compilo à jour
• Production parallèle de binaires 32
et 64 bits pour PHP – pas encore
pour tous les modules (55%)
Support 64 bit
• Les runtimes sont à jour et unifiés,
les outils d’audit sont utilisés.
Sécurité
De CGI à FastCGICGI
Un process par
requête
Avantage
• Très stable
Inconvénient
• *Très* lent sous
Windows (coût
énorme de création
d’un process)
ISAPI
Chargement de
PHP dans un
surrogate ou dans
le process IIS
Avantage
• Très performant
Inconvénients
• Stabilité
• Réentrance
FastCGI
Gestion d’un pool
de process
Avantages
• Plus rapide que CGI
• Plus stable qu’ISAPI
• Permet de
fonctionner sans
réentrance
FastCGI ?
Wincache
V1
Cache d’OpCodes
Cache de fichiers
Cache de résolution de noms de fichiers
30 juin 2010 : sortie de la V1.1
Cache d’objets (syntaxe identique à APC)
Stockage de session (avec persistance disque)
Support des notifications du filesystem (invalidation)
Où ? http://www.iis.net/download/wincacheforphp
Quelle licence ? BSD
Exemple : index.php (drupal 6)
Quels gains de performance ?
Drivers PHP pour Sql Server
Nous apprenons …
V1 :
Driver natif,
Licence MS-PL
V2 :
driver natif,
driver PDO,
Licence Apache 2
http://www.microsoft.com/opensource/dire
ctory.aspx
Packaging …
Installation de tout ça..
Une partie est dans PECL
http://pecl.php.net/package/WinCache/
Une partie est sur CodePlex
http://sqlsrvphp.codeplex.com
Une partie est sur la page de Pierre Joye…
APC, mongo, Oauth
http://downloads.php.net/pierre/
.
Installation & administration
PHP Manager
Web PI
IIS ? http://php.iis.net
Fichiers .htaccess
Reverse Proxy
URL Rewriting
Forums
Galerie
…
Les outils
Sortie cet été de WebMatrix
En beta 3 pour le moment
http://web.ms/webmatrix
Cloud Computing, la suite
www.windowsazure4e.org
Cloud Computing, la suite
DrupalCon San Francisco
PDO::__construct($dsn[, $username[, password[,
$driver_options()]]])
Everyone does it differently
Inconsistent behavior from PDO for $driver_options
Solution: custom attributes only in constructor
PDO::lastInsertId([$name])
Failure behavior completely undefined
Many other implementations don’t throw exception
even when PDO::ATTR_ERRMODE is set to
PDO::ERRMODE_EXCEPTION
Solution: all errors suppressed
SQLPHP: challenges: API
definitions
Range queries pour d’autres moteurs:
SELECT * FROM table ORDER BY date LIMIT 20,10
SQL Server a que TOP(n) et des fonctions de
fenêtrage, donc la requête se transforme en :
SELECT sub2.*,
ROW_NUMBER() OVER(ORDER BY sub2._l2) AS _l
FROM (
SELECT 1 AS _l2, sub1.* FROM (
SELECT TOP(30) * FROM table ORDER BY date
) AS sub1
) as sub2
WHERE _l BETWEEN 20 AND 30
Aussi performant, mais pas intuitif 
Un exemple intéressant
Sémantiques des requêtes MERGE
Dans Drupal, l’implémentation variait d’un
moteur de bases de données à un autre
Le travail sur Sql Server a mis en évidence ce
problème et apporté des questions
intéressantes pour Drupal :
“INSERT, if fails UPDATE”, ou
“UPDATE if there is a row matching a set of
conditions, INSERT otherwise”?
Un autre exemple
Sql Server s’est plutôt
bien marié avec
Drupal :
MySQL: 850 loc
PostgreSQL: 1008 loc
SQLite: 1177 loc
SQL Server: 1724 loc
Le travail s’est bien
passé grâce aux
suites de test de
Drupal.
99% des tests
passent depuis la
version alpha
Et au final ?
Une page de publicité
http://www.maplateformeweb.com

Php sous Windows - webcamps Paris

  • 1.
    PHP et Microsoft, quoide neuf ? Pierre Couzy – Microsoft France pierre.couzy@microsoft.com http://blog.couzy.com/
  • 2.
    Existe depuis unedécennie Pratiqué – en développement – par la majorité des développeurs PHP Et pourtant, Microsoft a longtemps mené la vie dure à PHP PHP sur Windows ?
  • 3.
    3 objectifs simples: I. Impliquer (et s’impliquer dans) les Communautés II. Garantir le bon fonctionnement des projets sur les OS Windows III. Ouvrir nos produits et services à des environnements traditionnellement non Microsoft L'Open Source Technology Center
  • 4.
    OSTC : unpeu d'histoire … Commencé en 2004 2 ordinateurs une seule personne
  • 5.
    L'OSTC : aujourd'hui Hébergéà Redmond Composé d’experts en logiciels libres et Linux Tests d'interopérabilité des logiciels libres avec des technologies Windows Tests de performances de Windows et de la stack des logiciels libres
  • 6.
    Redmond Open SourceLab Plus de 400 serveurs de différents types (Gumstix, Intel, AMD, Blades, clusters HPC clusters et des machines IBM P6) La disponibilité de plus de 340 distributions Linux La plus haute densité de calcul de tous les laboratoires de Microsoft Redmond
  • 7.
  • 8.
    Industrialiser une distroPHP • Certains binaires avaient 12 ans d’âge.. Des librairies hétérogènes • Certaines librariries n’existaient qu’en format binaire, d’origine ou de licence inconnue. Code source indisponible • Les librairies n’avaient pas suivi les pratiques de sécurité depuis 10 ans pour certaines Pas de mises à jour de sécurité • Désynchronisation de la version Windows (pas de mises à jour des fonctionnalités) Pas de parité fonctionnelle • Le processus de build est exhaustif et automatisé. Recompilation de chaque binaire • Gestion de sécurité et de fonctionnalités à parité stricte avec les autres plateformes, puisqu’on s’appuie sur une souche commune de source Gestion des dépendances • On peut désormais exploiter des outils modernes d’optimisation de façon transversale puisque tout le source est synchronisé. Retour au source
  • 9.
    Passage à VisualC++ 9 •Visual C++ 6.0 a 10 ans et ne sait pas produire de code adapté au matériel et systèmes d’exploitation actuels. Builds VC 6 •PHP sur Windows devenait un projet obsolète, de moins en moins de gens utilisant VC6 Un Compilo obsolète •Limitation de VC6 Pas de 64 bit •Un assemblage disparate et peu robuste Sécurité ? • VC9 permet de compiler pour les OS et architectures actuelles Builds VC 9 • Optimisations classiques du compilateur mais aussi des techniques nouvelles (PGO) Un compilo à jour • Production parallèle de binaires 32 et 64 bits pour PHP – pas encore pour tous les modules (55%) Support 64 bit • Les runtimes sont à jour et unifiés, les outils d’audit sont utilisés. Sécurité
  • 10.
    De CGI àFastCGICGI Un process par requête Avantage • Très stable Inconvénient • *Très* lent sous Windows (coût énorme de création d’un process) ISAPI Chargement de PHP dans un surrogate ou dans le process IIS Avantage • Très performant Inconvénients • Stabilité • Réentrance FastCGI Gestion d’un pool de process Avantages • Plus rapide que CGI • Plus stable qu’ISAPI • Permet de fonctionner sans réentrance
  • 11.
  • 12.
    Wincache V1 Cache d’OpCodes Cache defichiers Cache de résolution de noms de fichiers 30 juin 2010 : sortie de la V1.1 Cache d’objets (syntaxe identique à APC) Stockage de session (avec persistance disque) Support des notifications du filesystem (invalidation) Où ? http://www.iis.net/download/wincacheforphp Quelle licence ? BSD
  • 13.
  • 14.
    Quels gains deperformance ?
  • 15.
    Drivers PHP pourSql Server
  • 16.
    Nous apprenons … V1: Driver natif, Licence MS-PL V2 : driver natif, driver PDO, Licence Apache 2 http://www.microsoft.com/opensource/dire ctory.aspx
  • 18.
  • 19.
    Installation de toutça.. Une partie est dans PECL http://pecl.php.net/package/WinCache/ Une partie est sur CodePlex http://sqlsrvphp.codeplex.com Une partie est sur la page de Pierre Joye… APC, mongo, Oauth http://downloads.php.net/pierre/ .
  • 20.
  • 21.
    IIS ? http://php.iis.net Fichiers.htaccess Reverse Proxy URL Rewriting Forums Galerie …
  • 22.
    Les outils Sortie cetété de WebMatrix En beta 3 pour le moment http://web.ms/webmatrix
  • 23.
    Cloud Computing, lasuite www.windowsazure4e.org
  • 24.
  • 25.
  • 26.
    PDO::__construct($dsn[, $username[, password[, $driver_options()]]]) Everyonedoes it differently Inconsistent behavior from PDO for $driver_options Solution: custom attributes only in constructor PDO::lastInsertId([$name]) Failure behavior completely undefined Many other implementations don’t throw exception even when PDO::ATTR_ERRMODE is set to PDO::ERRMODE_EXCEPTION Solution: all errors suppressed SQLPHP: challenges: API definitions
  • 27.
    Range queries pourd’autres moteurs: SELECT * FROM table ORDER BY date LIMIT 20,10 SQL Server a que TOP(n) et des fonctions de fenêtrage, donc la requête se transforme en : SELECT sub2.*, ROW_NUMBER() OVER(ORDER BY sub2._l2) AS _l FROM ( SELECT 1 AS _l2, sub1.* FROM ( SELECT TOP(30) * FROM table ORDER BY date ) AS sub1 ) as sub2 WHERE _l BETWEEN 20 AND 30 Aussi performant, mais pas intuitif  Un exemple intéressant
  • 28.
    Sémantiques des requêtesMERGE Dans Drupal, l’implémentation variait d’un moteur de bases de données à un autre Le travail sur Sql Server a mis en évidence ce problème et apporté des questions intéressantes pour Drupal : “INSERT, if fails UPDATE”, ou “UPDATE if there is a row matching a set of conditions, INSERT otherwise”? Un autre exemple
  • 29.
    Sql Server s’estplutôt bien marié avec Drupal : MySQL: 850 loc PostgreSQL: 1008 loc SQLite: 1177 loc SQL Server: 1724 loc Le travail s’est bien passé grâce aux suites de test de Drupal. 99% des tests passent depuis la version alpha Et au final ?
  • 30.
    Une page depublicité http://www.maplateformeweb.com

Notes de l'éditeur

  • #8 Projet CodePlex « Microsoft SQL Server Driver for PHP » : http://sqlsrvphp.codeplex.com/
  • #27 120 secs