Statistiques de versions de PHP - avril 2012

le - Lien permanent 6 commentaires

En septembre 2011, et en janvier cette année, j’ai eu l’occasion de publier deux articles présentant quelques statistiques d’utilisation des différentes versions de PHP.

Depuis, le dernier article de cette série, environ trois mois se sont écoulés, PHP 5.4 est sorti en sa première version stable (le 1er mars), et la version 5.4.1 est actuellement en RC1. Le moment semble donc venu de publier une mise à jour de ces statistiques.

Les données présentées dans cet article ont été collectées le week-end du 21 avril 2012.

Sommaire :


Quelques mots sur la méthode

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

  • Du top 1 million d’Alexa (chargé plusieurs fois à quelques semaines/mois d’écart, ce qui donne plus de 1 million de noms de domaines),
  • Des liens externes de wikipedia de plusieurs langues (environ 3 millions de noms de domaines),
  • De l’export mis à disposition par l’Export Open Directory (environ 2 millions de noms de domaines),
  • 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 généralement2 basé sur l’en-tête HTTP X-Powered-By renvoyée par le serveur, pour en extraire le nom du 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.afup.org) :

Server: Apache
X-Powered-By: PHP/5.2.14-0.dotdeb.0

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


Quelques chiffres

Réponses PHP

Sur les 7.9 millions de requêtes HTTP effectuées sur les noms de domaines que j’ai testé, environ 26% des réponses ont été identifiées comme générées par du PHP.
Plus précisément, j’ai identifié 2,063,505 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 : 4,496,236 — 67.16%
  • IIS : 1,227,240 — 18.33%
  • nginx : 414,578 — 6.19%
  • Autres : 268,720 — 4.01%
  • GSE : 161,937 — 2.42%
  • YTS : 49,382 — 0.74%
  • LiteSpeed : 48,719 — 0.73%
  • Oversee Turing v1.0.0 : 28,359 — 0.42%

Ou, sous forme d’un graphe :

Serveurs Web

On continuera de noter l’importance d’Apache, qui, toutes versions confondues, est toujours en tête, loin devant les autres.
nginx, quant à lui, confirme sa troisième place, en progressant même d’un demi-point en trois mois.


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

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

  • PHP 3 : 784 — 0.04%
  • PHP 4 : 248,241 — 12.03%
  • PHP 5 : 1,814,376 — 87.93%
  • PHP 6 : 31 — 0.00%

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 :

Versions majeures de PHP

On notera :

  • Que, fort heureusement, PHP 5 est la version majeure la plus répandue,
  • Mais que, en 2012, on a encore quelques centaines de sites, sur 7.9 millions, qui tournent encore sur du PHP 3,
  • Mais aussi que PHP 4 (avec ses 12%) est encore beaucoup 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 production4 ???


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 : 782 — 0.04%
  • PHP 4.0 : 1,808 — 0.09%
  • PHP 4.1 : 4,292 — 0.21%
  • PHP 4.2 : 3,842 — 0.19%
  • PHP 4.3 : 55,257 — 2.68%
  • PHP 4.4 : 183,039 — 8.87%
  • PHP 5.0 : 7,286 — 0.35%
  • PHP 5.1 : 84,938 — 4.12%
  • PHP 5.2 : 1,189,049 — 57.63%
  • PHP 5.3 : 530,983 — 25.73%
  • PHP 5.4 : 2,111 — 0.10%
  • PHP 6.0 : 29 — 0.00%

Et sous forme graphique :

Versions mineures de PHP

Pour résumer :

  • PHP 5.2, qui a atteint sa fin de vie en décembre 2010, il y a déjà plus d’un an, est toujours la version de PHP qui semble aujourd’hui la plus utilisée / répandue,
  • PHP 5.3, stable depuis juin 2009, soit bientôt trois ans, n’arrive qu’en seconde place — et loin derrière PHP 5.2,
    • Mais notons tout de même que PHP 5.3 a gagné plus de 7 points depuis janvier, ce qui lui permet, pour la première fois, d’atteindre les 25% !
  • PHP 5.4, sortie en sa première version stable il y a moins de deux mois, atteint timidement les 0.10%.

Considérant que PHP 5.2 est encore la version de PHP utilisée sur plus de la moitié des serveurs pour lesquels j’ai obtenu des données, et que PHP 5.3, au bout de presque 3 ans, atteint tout juste les 25%, je suis curieux de voir quelle sera l’évolution de PHP 5.4 sur les prochains mois !


Versions releases de PHP

Et enfin, si on descend au niveau des versions release de PHP 5.x5, en ne conservant que les versions qui remontées 100 fois ou plus, on obtient les données suivantes :

  • Pour PHP 5.0 :
    • 5.0.1 : 118 — 0.01%
    • 5.0.2 : 270 — 0.01%
    • 5.0.3 : 691 — 0.04%
    • 5.0.4 : 5,203 — 0.29%
    • 5.0.5 : 950 — 0.05%
  • Pour PHP 5.1 :
    • 5.1.1 : 335 — 0.02%
    • 5.1.2 : 6,292 — 0.35%
    • 5.1.3 : 1,539 — 0.08%
    • 5.1.4 : 2,337 — 0.13%
    • 5.1.5 : 255 — 0.01%
    • 5.1.6 : 74,160 — 4.09%
  • Pour PHP 5.2 :
    • 5.2.0 : 23,240 — 1.28%
    • 5.2.1 : 5,765 — 0.32%
    • 5.2.2 : 1,872 — 0.10%
    • 5.2.3 : 8,502 — 0.47%
    • 5.2.4 : 42,825 — 2.36%
    • 5.2.5 : 31,155 — 1.72%
    • 5.2.6 : 162,833 — 8.98%
    • 5.2.7 : 159 — 0.01%
    • 5.2.8 : 23,952 — 1.32%
    • 5.2.9 : 78,047 — 4.30%
    • 5.2.10 : 42,968 — 2.37%
    • 5.2.11 : 29,425 — 1.62%
    • 5.2.12 : 37,048 — 2.04%
    • 5.2.13 : 57,964 — 3.20%
    • 5.2.14 : 57,252 — 3.16%
    • 5.2.15 : 4,674 — 0.26%
    • 5.2.16 : 24,621 — 1.36%
    • 5.2.17 : 556,636 — 30.68%
  • Pour PHP 5.3 :
    • 5.3.0 : 3,022 — 0.17%
    • 5.3.1 : 4,288 — 0.24%
    • 5.3.2 : 54,067 — 2.98%
    • 5.3.3 : 116,147 — 6.40%
    • 5.3.4 : 5,552 — 0.31%
    • 5.3.5 : 49,736 — 2.74%
    • 5.3.6 : 44,931 — 2.48%
    • 5.3.7 : 871 — 0.05%
    • 5.3.8 : 74,447 — 4.10%
    • 5.3.9 : 14,311 — 0.79%
    • 5.3.10 : 163,515 — 9.01%
  • Pour PHP 5.4 :
    • 5.4.0 : 1,991 — 0.11%
    • 5.4.1 : 119 — 0.01%

Et sous forme graphique :

Versions releases de PHP

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) ; la version fournie par défaut sous Debian Lenny, par exemple.
  • 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, dont en particulier :
    • PHP 5.3.3 — version par défaut sous Debian Squeeze, notamment,
    • Et PHP 5.3.10 — dernière version stable de PHP 5.3.x ; étant la plus répandue des versions release de PHP 5.3.x.
  • Par pure curiosité, notons que PHP 5.4.1 est la version utilisée sur une centaine de serveurs, parmis les quelques millions de serveurs interrogés, alors qu’au moment où ces données ont été collectées, cette version n’avait été publiée qu’en RC (PHP 5.4.1 est sortie en version stable avant la publication de cet article, mais après la collecte des données qu’il présente).


Evolution

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 20116 :

Evolution 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, et 5.4), ainsi que, dans une moindre mesure les deux autres versions les plus utilisées (autrement dit, PHP 4.4 et 5.1).

Le point clairement mis en évidence ici est que PHP 5.2 laisse petit à petit sa place à PHP 5.3 — ce qui est une très bonne chose, même s’il serait appréciable que la migration se fasse un peu plus rapidement, considérant les “nouveautés” qu’apporte PHP 5.3, le fait que PHP 5.2 ait atteint sa fin de vie, ou même la sortie récente de PHP 5.4.



  1. PHP 5.4.1 a été publiée le 26 avril 2012, soit avant cet article, mais quelques jours après la collecte des données présentées ici. 

  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 ne pas prendre en compte les quelques résultats abherrant qu’on aurait pu relever — du genre overworld.su qui renvoi X-Powered-By: PHP/10.0.0 ??? 

  4. Même si on ne rencontre que très peu de serveurs sous PHP 6, cette version de PHP, qui n’a jamais été publiée et dont le développement a même été abandonné, est tout de même déployée sur suffisament de machines pour attirer l’attention : cela signifie que, un jour, quelqu’un a installé sur un serveur « public » une version de développement de PHP, et n’a ensuite pas pris la peine de le mettre à jour… 

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

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

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

Commentaires

1. Par Moosh le 2012-05-03 09:51
Moosh

"Considérant que PHP 5.2 est encore la version de PHP utilisée sur plus de la moitié des serveurs pour lesquels j’ai obtenu des données, et que PHP 5.3, au bout de presque 3 ans, atteint tout juste les 25%, je suis curieux de voir quelle sera l’évolution de PHP 5.4 sur les prochains mois !"

Tous les 5.3 vont passer à 5.4

Les bloqués en 5.2 resteront en 5.2.

Contrairement à ce qui était annoncé en grandes pompes à la sortie de 5.3, la migration vers celui ci n'est pas "simple".

La migration est simple pour tout ce qui a été développé en Php 5 propre.

Mais tous les sites développés en php 4, n'ont pas été réécrit en php5 propre. Ils ont juste été "patchés".

5.3 mettant un terme à l'utilisation de toute sortes de fantôme de php 4 la migration est coûteuse.

2. Par Pascal MARTIN le 2012-05-03 19:19
Pascal MARTIN

Tous les 5.3 vont passer à 5.4
Les bloqués en 5.2 resteront en 5.2.

Justement : pour ceux qui sont sur le point de passer à 5.3 maintenant, est-ce qu'il ne serait pas intéressant de, à la place, prévoir une migration vers 5.4 directement, quitte à attendre quelques mois de plus pour être sûr que c'est stable ?

5.3 mettant un terme à l'utilisation de toute sortes de fantôme de php 4 la migration est coûteuse

Effectivement ; cela dit, le ménage qui a été fait avec PHP 5.3, même s'il ralenti la migration (voire la stoppe, pour pas mal de vieilles applications -- et, malheureusement, pas mal d'hébergeurs "grand public" qui ont de nombreux clients utilisant ces vieilles applications et/ou ne les mettant pas à jour), était probablement une bonne chose sur le long terme ; du moins pour ceux d'entre nous qui ont la chance de passer au-dela de la barrière 5.2-5.3.

3. Par croustibat le 2012-05-15 11:05
croustibat

Bonjour,

Pouvez-vous nous dire quel est le pourcentage de serveur qui n'expose par leurs technologies dans les entêtes HTTP ?

Merci en tout cas pour cette formidable initiative. :)

4. Par Pascal MARTIN le 2012-05-17 13:39
Pascal MARTIN

Bonjour,

Je n'ai pas conservé toutes les en-têtes "brutes" obtenues, et lorsque j'en extrait les informations qui m'intéressent, je suis surtout à la recherche de ce qui peut correspondre à du PHP -- donc, il est assez probable que je n'ai fréquemment pas identifié l'information "logiciel" pour les sites correspondant à autre chose que du PHP.

Ceci étant dit, sur les 7,917,869 domaines pour lesquels j'ai effectué une interrogation et obtenu un résultat, j'ai, pour ce qui est du serveur en lui-même (Apache, nginx, IIS, ...) :

  • 759,523 entrées pour lesquelles je n'ai pas identifié d'information,
  • et 7,158,346 entrées pour lesquelles j'ai identifié une information correspondant au serveur.

Pour ce qui est des logiciels (PHP, Ruby, Python, ...) j'ai:

  • 4,401,930 entrées pour lesquelles je n'ai pas identifié d'information,
  • et 3,515,939 entrées pour lesquelles j'ai identifié une information correspondant au logiciel.

Autrement dit, j'ai souvent identifié une information correspondant au serveur, ce qui ne me surprend pas vraiment : cette information est exposée via une en-tête qui est globalement toujours nommée Server, et n'est que rarement masquée.

Par contre, je n'ai su identifier une information correspondant au logiciel que dans moins de la moitié des cas, ce qui ne me surprend qu'à moitié : cette information est plus difficile à obtenir (en-têtes pas toujours nommées pareil ; par exemple, pour PHP, on trouve parfois cette information dans une en-tête Server, et d'autres fois dans une en-tête X-Powered-By ; pour ASP.NET, il y a souvent une en-tête nommée X-AspNet-Version ; il ne serait pas surprenant que, pour d'autres technos que je n'ai pas cherché à identifier, il y en ait encore d'autres), et est plus souvent masquée (PHP, par exemple, fournit la directive expose_php, qui permet de masquer cette information depuis le fichier de configuration du serveur ; et il on trouve souvent comme recommandation de désactiver cette directive).

Cela dit, je me permet d'insister : les chiffres donnés ici ne sont pas à prendre comme une vérité absolue, puisque je suis avant tout à la recherche des versions de PHP -- et que je n'ai que faire, pour ces statistiques, des autres langages, que je n'ai nullement cherché à identifier.

5. Par Anonyme le 2012-09-03 14:24
Anonyme

@Pascal MARTIN

Pourrais-tu sortir les statistiques de versions de PHP pour septembre 2012 ? Merci d’avance.

PS : Les 2 principaux cadriciels de PHP dans leur dernier version demandent à minima PHP 5.3.3 (ou recommandé en PHP 5.3.8) :
* symphony 2.1.x nécessite PHP 5.3.3 minimum : http://symfony.com/blog/a-week-of-symfony-280-7-13-may-2012 et https://github.com/symfony/symfony/blob/v2.1.0-RC2/README.md
* PHP 5.3.3 mini aussi pour Zend Framework 2.0 : https://github.com/zendframework/zf2

De plus PHP 5.4.x a des inconvénients :
* il retire les variables register_globals et magic_quote donc plus de possibilité de faire fonctionner les vieux sites PHP sans redéveloppement.
* suhosin-patch n’est toujours pas disponible pour cette version : http://www.hardened-php.net/suhosin/ donc beaucoup de sites vont rester bloqués en PHP 5.3.x qui sera la version mouroir des vieux sites conçus pour PHP4, (voire PHP3 ???).

6. Par Pascal MARTIN le 2012-09-03 21:37
Pascal MARTIN

Bonsoir,

Un article avec les statistiques d’août devrait arriver dans quelques temps (début de semaine prochaine, avec un peu de chance) ; le temps de le rédiger — j’ai collecté les stats en question il y a une semaine, il ne me reste “plus qu’à” écrire quelques lignes autour.

Les frameworks symfony et zend qui ont tous deux comme pré-requis PHP en version 5.3, ça me semble plus que normal, considérant que, d’une part, PHP 5.3 a quand même apporté pas mal de fonctionnalités intéressantes, et que, d’autre part, PHP 5.3 commence petit à petit à se répandre (pas trop tôt, d’aucun diraient).


Pour ce qui est de PHP 5.4, il est loin d’être répandu en production, mais il apporte aussi des fonctionnalités que j’ai hâte de pouvoir utiliser à plus large échelle (oué, bon, ok ,je dis toujours ça — j’ai du le dire il y a quelques jours à propos de PHP 5.5, d’ailleurs ^^ ).

Pour essayer de répondre en partie aux points que tu cites :

  • register_globals et magic_quote qui disparaissent, ce n’est pas une mauvaise chose à mes yeux :

    • pour ce qui est de la première directive, en particulier, elle est quand même désactivée par défaut depuis PHP 4.2 (publiée en avril 2002, il y a donc plus de 10 ans !), et marquée comme dépréciée depuis PHP 5.3 (publiée en juin 2009, il y a plus de 3 ans !)
    • pour ce qui est de la seconde, elle est aussi marquée comme dépréciée depuis PHP 5.3 — ce qui signifie que nous avons eu trois ans pour adapter nos applications, depuis le moment où nous avons su que cette fonctionnalité allait disparaitre (c’est à ça que sert E_DEPRECATED, après tout)
    • En tout cas, une application qui, en 2012, dépend de ces deux comportements, je dois dire que ça ne fait pas envie ^^ J’ai un peu peur d’imaginer les autres problèmes qu’il peut y avoir d’ailleurs… Cela dit, même si tu veux conserver des vieux sites, pourquoi ne pas utiliser une version plus récente de PHP pour les nouveaux développements ? Ca ne ferait probablement pas de mal (que ce soit pour la sécurité, les performances, … ou ta motivation et celle de tes collègues ;-) )
  • Suhosin qui n’est toujours pas disponible, je dois avouer que je ne me suis pas plus penché que cela sur le problème ; je serais tenté de dire que si suffisamment de monde était intéressé par le patch et/ou l’extension, il y aurait eu des volontaires pour bosser dessus ; mais j’admets que c’est un peu la solution de facilité ; heu, après un brin de rapides recherches, ça a pas l’air d’être vraiment aussi open que ça aurait pu l’être, niveau contributions…


Après, est-ce que PHP 5.4, aujourd’hui, est adapté à de la production ?

Je n’ai pas la réponse ; je ne pense pas que j’utiliserais PHP 5.4 si j’avais une application à mettre en production aujourd’hui ; par contre, si je commençais aujourd’hui le développement d’une application destinée à être mise en production dans quelques chose comme six mois… la question se poserait, sérieusement.

Ajouter un commentaire

Saisissez votre commentaire, en utilisant la syntaxe Markdown.