Statistiques de versions de PHP - septembre 2011
Par Pascal MARTIN le lundi 3 octobre 2011, 07:45 - Développement Web - Lien permanent
Avec la sortie de PHP 5.4 qui approche petit à petit[1], et PHP 5.3 rendue publique il y a plus de deux ans, je me demandais quelles sont les versions de PHP qui sont, aujourd’hui, les plus utilisées — et, donc, quelles sont les versions de PHP sur lesquelles nous pouvons nous attendre à voir nos applications déployées.
Sommaire :
- Quelques mots sur la méthode
- Versions majeures de PHP
- Versions mineures de PHP
- Versions release de PHP 5.x
- Le mot de la fin ?
Quelques mots sur la méthode
Pour faire simple, j’ai récupéré une liste de plus de 3 millions de noms de domaines, issus :
- Du top 1 million d’Alexa,
- Des liens externes de wikipedia en anglais (plus de 2 million de noms de domaines non compris dans le top Alexa),
- Et de quelques résultats de recherche google (quelques milliers de noms de domaines).
Ensuite, pour chacun de ces noms de domaines, j’ai effectué une requête HTTP HEAD sur domaine.tld, en me rabattant sur www.domaine.tld si la première requête échouait.
Après cela, je me suis basé sur l’en-tête HTTP X-Powered-By renvoyée par le serveur, pour en extraire le nom de logiciel ayant servir à générer la page, ainsi que sa version.
Et dans le cas où cette en-tête n’existe pas, ou ne contient pas d’information exploitable, je me suis rabattu sur l’en-tête Server.
Pour rappel, et en ne prenant que quelques exemples relativement typiques, les en-têtes HTTP renvoyées par le serveur, dans le cas de pages générées par PHP et sur un serveur exposant la version de PHP utilisée, ressemblent souvent à quelque chose de ce type (pour www.php.net) :
Server: Apache/1.3.41 (Unix) PHP/5.2.17 X-Powered-By: PHP/5.2.17
ou (pour www.mozilla.org) :
Server: Apache X-Powered-By: PHP/5.2.9
A partir de là, extraire le numéro de la version de PHP utilisée est une opération relativement aisée…
PHP ?
Sur les 3.1 million de requêtes HTTP effectuées sur les noms de domaines que j’ai testé, environ 25% des réponses ont été identifiées comme générées par du PHP.
Plus précisément, j’ai identifié 828,564 réponses comme correspondant à du PHP.
Avec plus de 800k réponses, les statistiques présentées plus bas devraient avoir des chances d’être à peu près correctes, ou, tout au moins, de donner des résultats et chiffres relativement proches de la réalité…
Versions majeures de PHP
Commençons par les versions majeures de PHP, en prenant en compte les résultats qui ont été identifiés comme correspondant à une version supérieure ou égale à 3, et inférieure ou égale à 6[2].
Mes tests ont remonté le nombre suivant de domaines sur chaque version majeure de PHP :
- PHP 3 : 257
- PHP 4 : 86,594
- PHP 5 : 741,638
- PHP 6 : 18
Sous forme d’un graphe, qui peut être plus parlant pour certains et permet de voir en un clin d’oeil quelle est la version majeure de PHP la plus répandue, cela donne :
On notera :
- Que, fort heureusement, PHP 5 est la version majeure la plus répandue,
- Mais que, seconde moitié 2011, on a encore quelques centaines de sites, sur 3 millions, qui tournent encore sur du PHP 3,
- Et aussi que PHP 4 est encore trop répandue, alors que cela fait des années que cette version n’est plus du tout maintenue (PHP 4.4.9, publiée en Août 2008, était annoncée comme étant la dernière version de PHP 4.x),
- Et enfin que, plus d’un an après la mise à mort de la branche PHP 6 (qui, pour rappel, n’a jamais vu une version ne serait-ce qu’alpha être publiée), on rencontre (encore) des sites qui utilisent PHP 6 en production ???
Versions mineures de PHP
Si on passe aux versions mineures de PHP, toujours pour PHP >= 3.x et PHP <= 6.x, et en ne conservant que les versions qui sont remontées 10 fois ou plus, on obtient les données suivantes :
- PHP 3.0 : 257
- PHP 4.0 : 595
- PHP 4.1 : 1,385
- PHP 4.2 : 1,446
- PHP 4.3 : 22,095
- PHP 4.4 : 61,072
- PHP 5.0 : 3,422
- PHP 5.1 : 47,695
- PHP 5.2 : 566,243
- PHP 5.3 : 124,240
- PHP 5.4 : 30
- PHP 6.0 : 17
Et sous forme graphique :
Pour résumer :
- PHP 5.2, qui a atteint sa fin de vie en décembre 2010, il y a déjà bientôt un an, est la version de PHP qui semble aujourd’hui la plus utilisée / répandue,
- PHP 5.3, stable depuis juin 2009, soit plus de deux ans, n’arrive qu’en seconde place — et loin derrière PHP 5.2,
- Et PHP 5.1 et 4.4 sont relativement proches l’un de l’autre.
Versions release de PHP 5.x
Et enfin, si on descend au niveau des versions release de PHP 5.x[3], en ne conservant que les versions qui remontées 100 fois ou plus, on obtient les données suivantes :
- Pour PHP 5.x :
- 5.0.2 : 116
- 5.0.3 : 326
- 5.0.4 : 2,401
- 5.0.5 : 502
- Pour PHP 5.1 :
- 5.1.1 : 196
- 5.1.2 : 3,012
- 5.1.3 : 184
- 5.1.4 : 1,227
- 5.1.5 : 127
- 5.1.6 : 42,940
- Pour PHP 5.2 :
- 5.2.0 : 10,493
- 5.2.1 : 3,089
- 5.2.2 : 960
- 5.2.3 : 4,145
- 5.2.4 : 21,111
- 5.2.5 : 15,631
- 5.2.6 : 94,194
- 5.2.8 : 11,280
- 5.2.9 : 43,752
- 5.2.10 : 22,478
- 5.2.11 : 15,610
- 5.2.12 : 17,588
- 5.2.13 : 28,808
- 5.2.14 : 36,532
- 5.2.15 : 3,594
- 5.2.16 : 18,877
- 5.2.17 : 217,942
- Et pour PHP 5.3 :
- 5.3.0 : 1,810
- 5.3.1 : 2,715
- 5.3.2 : 21,890
- 5.3.3 : 28,359
- 5.3.4 : 5,261
- 5.3.5 : 16,680
- 5.3.6 : 31,549
- 5.3.7 : 643
- 5.3.8 : 15,310
Et sous forme graphique :
Pour résumer :
- Une quantité non-négligeable de sites sous PHP 5.1.6 (qui a été publiée en Août 2006) ; la version fournie par défaut sous certaines distributions, il me semble, genre Redhat Enterprise ?
- Beaucoup de PHP 5.2.6 (publiée en Mai 2008) ; probablement la version fournie par défaut sous une autre distribution ?
- La version de PHP la plus répandue est PHP 5.2.17 (publiée en Janvier 2011) ; ça reste du 5.2, qui a atteint sa fin de vie, mais positivons, en se disant que c’est la dernière version, la plus à jour…
- Et enfin, plusieurs sous versions de PHP 5.3.x, sans qu’aucune ne s’impose vraiment ; notons que la version 5.3.7, avec son bug de sécurité, et qui n’a été disponible que quelques jours, n’est heureusement pas la plus répandue (même si on pourrait souhaiter qu’une version connue pour un problème de ce type ne soit absolument pas utilisée).
Le mot de la fin ?
Je ne ferai pas une longue analyse sur le pourquoi du comment des chiffres que j’ai présenté ici : libre à vous de commenter sur le trop grand usage de versions complètement obsolètes, et le manque de mise à jour que l’on peut, malheureusement, trop souvent constater…
Cela dit, une question pour vous, lecteurs : connaissez-vous des sites qui publient ce genre de statistiques de manière régulière — idéalement, gratuitement ?
Il fût un temps, nexen en publiait, mais j’ai l’impression qu’ils ont arrêté depuis 2008…
Notes
[1] la première version bêta de PHP 5.4 est sortie quelques jours après que j’aie réalisé les tests publiés ici
[2] Pour ne pas prendre en compte les quelques résultats abherrant qu’on aurait pu relever — du genre l2.ws qui renvoi X-Powered-By: PHP/10.0.0 ???
[3] PHP 4 correspondant à des versions tellement dépassées que je préfére ne pas prendre la peine de rentrer au niveau des versions release
Pour être averti lors de la publication de nouvelles entrées, n'hésitez pas à vous abonner au flux RSS ou ATOM des articles de mon blog !



Commentaires
PHP 5.2.6 est la version stable de PHP sous Debian Lenny.
@Tom > Noté ; merci pour l'info
Personnellement, j'ai de nombreuse applications sous 5.2 parce que c'est le package maintenue officiellement sur les Debian Lenny. La politique interne de ma boite refuse de passer par des dépôts de tiers (dotdeb par exemple) et ils n'ont pas le temps de recompiler a chaque nouvelle version de PHP.
L'arrivé de squeez va changer la donne pour les nouveau projet, mais ceux qui tournent déjà en prod ne feront probablement pas de dist-upgrade et continueront donc évoluer sur du 5.2
NB: les différents audit de sécurité qu'on a passé nous ont tous conseillés de ne pas afficher ces informations dans les requêtes. Moins l'attaquant connait d'infos sur nos appli/version, plus difficile sera sa tâche...
le passage de 5.2 à 5.3 est une formalité pour les développements "fait" pour php5.
le passage de 5.2 à 5.3 est une plaie pour les développements "fait" pour php4, "portés" à php5.
@Jérémy > je suis d'accord sur le fait de ne pas donner trop d'informations ; surtout si c'est pour indiquer des versions pas vraiment à jour ; mais j'espère que suffisamment peu d'hébergeur prennent la peine de changer l'option de configuration correspondante pour que ces quelques statistiques soient à peu près justes ^^
@moosh > le passage de 5.2 à 5.3 est une formalité si tu as "pris la peine" de coder proprement, et de lire la page de manuel qui va bien, tu veux dire ?
Après, oui, sur du code PHP 4 qui date d'il y a genre 5-8 ans, il y aura souvent plus de boulot que sur du code PHP 5.2 pas trop vieux...
Salut,
tu connais cet article : http://phpadvent.org/2010/usage-sta...
A++
@Cyril > je suppose que je l'ai lu (rapidement, peut-être) au moment où il est paru (j'essaye de survoler à peu près tout ce qui passe sur la planete php anglo-saxone, même si parfois avec un ou deux mois de retard), mais je dois avouer que je ne m'en souviens pas du tout ; merci pour le lien, c'est une lecture intéressante !
Marrant de voir que je me suis aussi retrouvé avec en gros 25 requêtes en parallèles, pas plus efficaces que 50 ; mes N requêtes en parallèles sont faites par des processus PHP indépendants, mais via curl... et pour peu qu'il y ait un truc partagé au niveau de libcurl, sur la résolution domaine -> IP... je suis peut-être bien tombé sur le problème dont parlait Ilia.
Et moi aussi, je me suis limité à des requêtes HEAD, justement pour éviter de manger toute la bande passante à coups de téléchargements de pages complètes.
A côté de ça, il est rassurant de voir que je tombe sur des résultats qui me semblent à peu près cohérent par rapport à ceux de Ilia, considérant que j'ai testé 3M domaines et lui 11M ; mais que mes tests ont eu lieu quelque chose comme 8 moins après les siens.
Il disait dans son conclusion qu'il allait peut-être poster plus de choses sur son blog ; celui-ci semble down à l'instant présent... Mais je me demande si je ne vais pas essayer de le contacter, à tout hasard, à la fois pour son resolv.c et pour savoir s'il a été plus loin ou pas ^^
Effectivement Nexen a l'air d'avoir arrêté la publication de ces stats, mais peux-tu les republier (enfin refaire le traitement avec la même méthode) dans 3 mois ?
Tu peux contacter Ilia sans aucun problème, il est très réceptif et sera ravi de t'aider ou de compléter tes informations.
@Mère Teresa > En calculant ces stats pour la première fois il y a en gros un an (je n'ai plus les résultats ; et c'était sur un volume de données plus réduit), je me disais que ça serait intéressant de le faire régulièrement... Et avec la sortie de PHP 5.4 qui approche, l'idée m'est revenue à l'esprit....
Il se pourrait bien que j'améliore un peu mes scripts et le processus de collecte / reporting, que j'automatise un peu plus (ça l'est déjà en partie, mais ça peut être amélioré), et que je publie quelques stats de manière "régulière" ; tous les trois mois semble raisonnable.
Si ça se fait, tu connais l'URL de mon blog ^^
@mageekguy > Je note
J'avais dîné à la même table que lui (la table "anglais") au dernier forum PHP, et j'en ai gardé un fort bon souvenir.
Merci Pascal pour ces résultats.
Je n'avais pas pris le temps de commenter.
L'occasion pour moi de te souhaiter une bonne année.
Comme Sarah, je serai ravis d'avoir ces statistiques au trimestre.
Si tu as besoin d'un coup de main...
Encore merci.