Statistiques de versions de PHP - novembre 2013

12 novembre 2013php, stats
 Cet article a été rédigé il y a plusieurs années et peut ne plus être tout à fait à jour…

En septembre 2011, j’ai posté pour la première fois un article où je présentais quelques statistiques à propos des versions de PHP utilisées sur quelque chose comme 800,000 serveurs web. A ce moment là, il y a plus de deux ans, PHP 5.2 était, de loin, la version de PHP la plus utilisée, PHP 5.3 n’arrivant que loin derrière, et PHP 4 était encore largement trop utilisé.

En janvier de cette année, j’ai rédigé le sixième article de cette série. PHP 5.2 représentait alors encore 45.5% des 2.2 million d’hôtes PHP identifiés, mais PHP 5.3 arrivait presque à égalité, avec 40.8%. En parallèle, PHP 5.5 était en pleine phase de versions alpha.

Dix mois après, alors que l’année 2013 va bientôt toucher à sa fin, où en sommes-nous ?

Les données présentées dans cet article ont été collectées le week-end du 2 novembre 2013. Les versions stables de PHP sont 5.3.27 (PHP 5.3 ayant atteint son EOL en juillet, et ne recevra plus que des correctifs de sécurité — jusque juillet 2014), PHP 5.4.21 (PHP 5.4 est aujourd’hui la version dite “old-stable”), et PHP 5.5.5 (PHP 5.5 ayant été déclarée “stable” le 20 juin 2013). PHP 5.2 n’est quant à elle plus supportée depuis bientôt trois ans.


Sommaire :


Quelques mots sur la méthode

Pour faire simple1, j’ai récupéré une liste de plus de 10.3 millions de noms de domaines, issus principalement :

  • Du top 1 million d’Alexa (chargé plusieurs fois à quelques mois/années d’écart, ce qui donne maintenant bien plus d’un million de noms de domaines),
  • Du top 1 million de Quancast (là aussi, chargé plusieurs fois à quelques mois d’écart),
  • Des liens externes de Wikipedia de plusieurs langues (environ 3 millions de noms de domaines — certains correspondant à des sites un peu anciens et pas vraiment mis à jour),
  • De l’export mis à disposition par l’Export Open Directory (environ 2 millions de noms de domaines — même remarque),
  • Et de quelques résultats de recherche google (quelques milliers de noms de domaines — encore).

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 généralement2 basé sur l’en-tête HTTP X-Powered-By renvoyée par le serveur, pour en extraire le nom de logiciel ayant servi à générer la page, ainsi que sa version. Dans les 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 qui expose à la fois une en-tête Server et une en-tête X-Powered-By) :

Server: nginx/1.4.1
X-Powered-By: PHP/5.5.4-1

ou (pour www.compuware.com qui n’expose que la première) :

Server: Apache/2.2.13 (Win32) Communique/4.1.0 PHP/5.4.15

A partir de là, extraire le numéro de la version de PHP utilisée est une opération relativement aisée…

Pour ceux qui voudraient plus de détails, je vous invite à lire deux commentaires romans que j’avais postés suite à l’article de janvier, en réponses à quelques questions qui m’avaient été posées : le premier, et le second.


Quelques chiffres

Réponses PHP

Sur les 9.3 millions de requêtes HTTP effectuées sur les noms de domaines que j’ai testés, environ 26% des réponses ont été identifiées comme générées par du PHP3.

Plus précisément, j’ai identifié 2,459,698 réponses comme correspondant à du PHP.

Avec ce nombre relativement conséquent de 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é…


Serveurs Web

Cela dit, avant d’entrer dans les détais des versions de PHP, voici la liste des Serveurs Web les plus fréquemment identifiés lors de ma collecte de données :

  • Apache : 5,648,351 — 65.14%
  • IIS : 1,448,074 — 16.70%
  • nginx : 687,779 — 7.93%
  • Autres : 419,654 — 4.84%
  • GSE : 227,918 — 2.63%
  • Oversee Turing v1.0.0 : 85,439 — 0.99%
  • LiteSpeed : 78,025 — 0.90%
  • cloudflare-nginx : 75,506 — 0.87%

Ou, sous forme d’un graphe :

Serveurs Web

On ne constate pas de révolution par rapport à janvier 2012 ou à ce début d’année :

  • Apache continue d’arriver en tête, puisqu’il sert pas loin de 2/3 des pages interrogées,
  • IIS est toujours en seconde place,
  • Et nginx conserve la troisième position.

Cela dit, il est intéressant de noter qu’Apache perd petit à petit des parts de marché (2.5% de moins en un an et dix mois), alors que nginx est en constante progression (2.5% de plus sur la même période).


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 à 64.

Mes tests ont remonté le nombre suivant de domaines sur chaque version majeure de PHP :

  • PHP 3 : 561 — 0.02%
  • PHP 4 : 144,853 — 5.89%
  • PHP 5 : 2,314,115 — 94.09%
  • PHP 6 : 23 — 0.00%

Sous forme d’un graphe, qui peut être plus parlant pour certains et permet de voir en un clin d’œil quelle est la version majeure de PHP la plus répandue, cela donne :

Versions majeures de PHP

On notera que, fort heureusement, PHP 5 est la version majeure la plus répandue — on en arrive d’ailleurs enfin à un point où cette comparaison de versions majeures n’est plus réellement intéressante !

Tout de même, pour le petit côté historique :

  • Presque fin 2013, on a encore quelques centaines de sites, sur 9.3 millions, qui tournent encore sur du PHP 35,
  • PHP 4 n’a toujours pas vraiment disparue, 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, PHP 6 (qui, pour rappel, n’a jamais vu une version ne serait-ce qu’alpha être publiée — et a été mise à mort il y a maintenant bien longtemps) est encore utilisée en production sur quelques dizaines de sites6


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 : 551 — 0.02%
  • PHP 3.2 : 10 — 0.00%
  • PHP 4.0 : 1,190 — 0.05%
  • PHP 4.1 : 2,764 — 0.11%
  • PHP 4.2 : 2,522 — 0.10%
  • PHP 4.3 : 30,464 — 1.24%
  • PHP 4.4 : 107,913 — 4.39%
  • PHP 5.0 : 3,602 — 0.15%
  • PHP 5.1 : 55,279 — 2.25%
  • PHP 5.2 : 845,705 — 34.38%
  • PHP 5.3 : 1,198,630 — 48.73%
  • PHP 5.4 : 197,552 — 8.03%
  • PHP 5.5 : 13,329 — 0.54%
  • PHP 5.6 : 10 — 0.00%
  • PHP 6.0 : 22 — 0.00%

Et sous forme graphique :

Versions mineures de PHP

Enfin ! Pour la première fois depuis que j’ai commencé à rédiger ce type d’articles, PHP 5.3 est passé devant PHP 5.2, ce qui signifie que PHP 5.3 figure désormais en première place \o/.

Pas trop tôt, considérant que PHP 5.3, qui a été déclarée stable en juin 2009, a atteint son EOL en juillet 2013, et ne recevra à l’avenir plus que des mises à jour de sécurité (et encore, seulement jusque juillet 2014, normalement) — et que PHP 5.2 est arrivé à sa fin de vie en décembre 2010, il y a presque trois ans donc…

La version aujourd’hui marquée comme old stable, PHP 5.4, publiée en mars 2012, en est quant à elle à tout juste 8%. Moins de 10% plus d’un an et demi après son passage en stable, encore une fois, montre bien que les nouvelles versions de PHP ne sont pas installées aussi vite qu’elles pourraient (et gagneraient à) l’être.

PHP 5.5, qui est la version stable de cette fin d’année, puisqu’elle a été publiée en juin 2013, fait une timide apparition dans ce classement, avec un petit demi-pourcent un peu moins de six mois après sa sortie.

Pour l’annecdote : sur les 10 serveurs qui remontent comme tournant sous PHP 5.6, 8 exposent un numéro de version impossible valant fort étrangement PHP/5.6.7_00:00, et deux (dont par exemple www.phpro.org) s’identifient réellement comme PHP/5.6.0-dev (qui, en ce moment, correspond à une compilation de PHP depuis la branche master).


Versions releases de PHP

Et enfin, si on descend au niveau des versions release de PHP 5.x7, en ne conservant que les versions qui remontées 100 fois ou plus, on obtient les données suivantes (à raison d’en gros une release par mois sur deux branches maintenues en parallèle, cette liste de versions se fait un peu longue) :

  • Pour PHP 5.0 :
    • 5.0.2 : 187 — 0.01%
    • 5.0.3 : 390 — 0.02%
    • 5.0.4 : 2,380 — 0.10%
    • 5.0.5 : 583 — 0.03%
  • Pour PHP 5.1 :
    • 5.1.1 : 196 — 0.01%
    • 5.1.2 : 2,675 — 0.12%
    • 5.1.3 : 1,562 — 0.07%
    • 5.1.4 : 1,379 — 0.06%
    • 5.1.5 : 146 — 0.01%
    • 5.1.6 : 49,312 — 2.13%
  • Pour PHP 5.2 :
    • 5.2.0 : 11,837 — 0.51%
    • 5.2.1 : 3,249 — 0.14%
    • 5.2.2 : 976 — 0.04%
    • 5.2.3 : 4,177 — 0.18%
    • 5.2.4 : 24,344 — 1.05%
    • 5.2.5 : 18,898 — 0.82%
    • 5.2.6 : 94,221 — 4.07%
    • 5.2.8 : 11,687 — 0.51%
    • 5.2.9 : 39,850 — 1.72%
    • 5.2.10 : 26,477 — 1.14%
    • 5.2.11 : 14,919 — 0.64%
    • 5.2.12 : 10,155 — 0.44%
    • 5.2.13 : 24,010 — 1.04%
    • 5.2.14 : 23,667 — 1.02%
    • 5.2.15 : 2,126 — 0.09%
    • 5.2.16 : 7,507 — 0.32%
    • 5.2.17 : 527,282 — 22.79%
    • 5.2.18 : 107 — 0.00%
  • Pour PHP 5.3 :
    • 5.3.0 : 2,087 — 0.09%
    • 5.3.1 : 2,626 — 0.11%
    • 5.3.2 : 46,730 — 2.02%
    • 5.3.3 : 238,690 — 10.32%
    • 5.3.4 : 2,301 — 0.10%
    • 5.3.5 : 14,398 — 0.62%
    • 5.3.6 : 23,788 — 1.03%
    • 5.3.7 : 542 — 0.02%
    • 5.3.8 : 39,915 — 1.73%
    • 5.3.9 : 6,371 — 0.28%
    • 5.3.10 : 167,133 — 7.22%
    • 5.3.11 : 671 — 0.03%
    • 5.3.12 : 305 — 0.01%
    • 5.3.13 : 29,505 — 1.28%
    • 5.3.14 : 10,964 — 0.47%
    • 5.3.15 : 16,500 — 0.71%
    • 5.3.16 : 20,822 — 0.90%
    • 5.3.17 : 16,679 — 0.72%
    • 5.3.18 : 22,831 — 0.99%
    • 5.3.19 : 20,143 — 0.87%
    • 5.3.20 : 14,115 — 0.61%
    • 5.3.21 : 84,397 — 3.65%
    • 5.3.22 : 17,214 — 0.74%
    • 5.3.23 : 30,510 — 1.32%
    • 5.3.24 : 25,176 — 1.09%
    • 5.3.25 : 31,389 — 1.36%
    • 5.3.26 : 66,989 — 2.90%
    • 5.3.27 : 245,825 — 10.62%
  • Pour PHP 5.4 :
    • 5.4.0 : 803 — 0.03%
    • 5.4.1 : 107 — 0.00%
    • 5.4.3 : 1,361 — 0.06%
    • 5.4.4 : 28,436 — 1.23%
    • 5.4.5 : 916 — 0.04%
    • 5.4.6 : 6,896 — 0.30%
    • 5.4.7 : 3,296 — 0.14%
    • 5.4.8 : 2,233 — 0.10%
    • 5.4.9 : 7,947 — 0.34%
    • 5.4.10 : 2,233 — 0.10%
    • 5.4.11 : 4,174 — 0.18%
    • 5.4.12 : 4,461 — 0.19%
    • 5.4.13 : 4,156 — 0.18%
    • 5.4.14 : 5,851 — 0.25%
    • 5.4.15 : 4,327 — 0.19%
    • 5.4.16 : 6,520 — 0.28%
    • 5.4.17 : 17,854 — 0.77%
    • 5.4.18 : 5,570 — 0.24%
    • 5.4.19 : 21,202 — 0.92%
    • 5.4.20 : 23,563 — 1.02%
    • 5.4.21 : 45,548 — 1.97%
  • Pour PHP 5.5 :
    • 5.5.0 : 1,156 — 0.05%
    • 5.5.1 : 1,422 — 0.06%
    • 5.5.2 : 782 — 0.03%
    • 5.5.3 : 5,441 — 0.24%
    • 5.5.4 : 2,692 — 0.12%
    • 5.5.5 : 1,832 — 0.08%

Et sous forme graphique :

Versions releases de PHP

Pour résumer :

  • Au niveau de PHP 5.1, la version 5.1.6 (qui a été publiée en Août 2006) est toujours un peu représentée ; si j’ai bonne mémoire, c’était la version par défaut sur certaines distributions “pro” (je pense à du Redhat Enterprise, en particulier, ou à CentOS 5.10) il n’y a encore pas si longtemps.
  • Pour ce qui est de PHP 5.2 :
    • PHP 5.2.17 (publiée en Janvier 2011) est la version release de PHP la plus utilisée, toutes versions mineures confondues, avec 22.8%. Je suppose qu’on peut se consoler en se disant que même si PHP 5.2 est une vielle version qui ne reçoit même plus de correctif de sécurité (mais comment peut-on continuer à utiliser ça en production ? Et quand on regarde les améliorations apportées par 5.3/5.4/5.5, comment peut-on encore développer en 5.2 ?), il s’agit au moins de la dernière version…
    • PHP 5.2.6, publiée en mai 2008 et version fournie par défaut sous Debian Lenny, représente quant à elle toujours 4%.
  • Pour PHP 5.3, trois versions release se distinguent :
    • PHP 5.3.3 remonte sur 10.3% des serveurs identifiés ; c’est notamment la version par défaut sous Debian Squeeze ou sous Centos 6.4
    • PHP 5.3.10 en est à 7.2% ; il s’agit notamment de la version packagée par Ubuntu Precise
    • PHP 5.3.27, la dernière version release de la branche 5.3 (et, sauf faille de sécurité découverte sur les 8 prochains mois, possiblement la dernière version de PHP 5.3), est la version la plus installée de PHP 5.3.x, avec ses 10.6%.
  • Passons à PHP 5.4 :
    • PHP 5.4.4 apparaît comme installée sur 1.2% des serveurs identifiés. C’est la version fournie par Debian Wheezy
    • PHP 5.4.21, la dernière release de la branche 5.4, en est elle à quasiment 2%, et est la version la plus représentée de la branche 5.4
  • Enfin, pour PHP 5.5, aucune version ne semble réellement se distinguer — mais il faut admettre que l’échantillon est un peu faible, même plusieurs mois après le passage de 5.5 en stable…
    • Une explication possible serait qu’aucune distribution orientée serveur ne vient aujourd’hui avec PHP 5.5 par défaut ?
    • Mais les choses semblent aller dans le bon sens, puisque PHP 5.5 est fournie par Debian Jessie (qui n’est pas encore stable), ou par Ubuntu 13.10 Saucy (sortie il y a peu).


Évolution

Fidèle à mon habitude, je ne ferai pas une longue analyse sur le pourquoi du comment des chiffres que j’ai présentés 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, puisque ce n’est pas la première fois que j’effectue ce processus de collecte de statistiques à propos des versions de PHP utilisées, je me suis dit qu’il pouvait être intéressant de tracer un graphe représentant l’évolution de ces utilisations.

Le graphe reproduit ci-dessous présente donc l’évolution de l’utilisation des versions mineures de PHP, depuis septembre 20118 :

Évolution de l'utilisation des versions (mineures) de PHP

J’ai essayé de mettre en évidence les versions les plus à même de nous concerner en ce moment (à savoir, PHP 5.2, 5.3, 5.4, et 5.5), ainsi que, dans une moindre mesure les deux autres versions les plus utilisées (autrement dit, PHP 4.4 et 5.1).

Le point le plus intéressant ici est sans aucun doute que, enfin, PHP 5.3 figure en première place, ayant finalement réussi à dépasser PHP 5.2 ! On pouvait s’y attendre en regardant les courbes de janvier 2013, août 2012, ou même avril 2012, mais c’est enfin une réalité \o/.

PHP 5.4 commence à se faire une petite place et à se détacher du groupe de courbes figurant tout en bas du graphique. Considérant que PHP 5.3 a atteint son EOL et ne recevra plus que des correctifs sécurité (et seulement jusqu’à juillet 2014 !), et que PHP 5.4 est déjà la version old-stable, idéalement, il serait dès maintenant temps de passer à PHP 5.5, quitte à sauter l’étape de PHP 5.4. Les migrations 5.3 -> 5.4 et 5.4 -> 5.5 sont plus faciles que la migration 5.2 -> 5.3, en particulier grâce au cycle de releases plus rapide adopté ces dernières années.

PHP 5.5, la version actuellement stable de PHP, est à peine visible… A nous de faire en sorte que cela change !



  1. Encore une fois, cet article s’est pas mal basé sur du copier-coller du précédent, et cela se voit tout particulièrement dans la section “la méthode”, qui n’a pas fondamentalement changée. 

  2. Pour certains types de serveurs ou de logiciels, j’ai mis en place un bout de code qui va chercher les informations de version dans d’autres en-têtes que X-Powered-By. Par exemple, pour les sites développés en ASP.NET, les informations de version figurent généralement dans une en-tête nommée X-AspNet-Version

  3. Pour rappel, 26% de réponses identifiées comme correspondant à des serveurs faisant tourner du PHP ne signifient pas que 26% des serveurs font tourner du PHP : de nombreux serveurs n’exposent pas les logiciels qu’ils utilisent. Par exemple, www.france.fr n’indique pas qu’il utilise du PHP, alors que c’est vraisemblablement le cas, le code de la page ressemblant très fortement à du Drupal. 

  4. Pour ne pas prendre en compte les quelques résultats aberrant qu’on aurait pu relever, comme www.tehnoinet.com.ua qui indique X-Powered-By: PHP/7.1-ubuntu15.4 ou lostworld.su et son PHP/10.0.0

  5. Par exemple, www.tux.org indique PHP/3.0.15

  6. A titre d’illustration, www.ism.edu.mo fait toujours remonter PHP/6.0.0-dev

  7. 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. 

  8. Les chiffres présentés sur le graphique d’évolution sont en pourcentages, afin d’être indépendants du nombre d’hôtes interrogés, qui varie à chaque série de collectes. Notez que les collectes n’ont pas été effectuées de manière très régulière dans le temps ; il n’y a donc pas le même écart entre chaque date ! 

Vous avez apprécié cet article ? Faites-le savoir !

Ce blog a récemment été migré vers un générateur de sites statiques et je n'ai pas encore eu le temps de remettre un mécanisme de commentaires en place.

Avec un peu de chance, je parviendrai à m'en occuper d'ici quelques semaines ;-)