1. PHP et Microsoft,
quoi de neuf ?
Pierre Couzy – Microsoft France
pierre.couzy@microsoft.com
http://blog.couzy.com/
2. 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. 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 : un peu 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 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
8. 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
9. 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é
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
12. 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
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/
.
26. 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
27. 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
28. 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
29. 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 ?
30. Une page de publicité
http://www.maplateformeweb.com
Notes de l'éditeur
Projet CodePlex « Microsoft SQL Server Driver for PHP » : http://sqlsrvphp.codeplex.com/