PHP

Page d'aide sur l'homonymie Pour les articles homonymes, voir PHP (homonymie).
PHP
Logo.

Date de première version1994
ParadigmesImpératif, orienté objet, fonctionnel, procédural, réflexif et interprété
AuteurRasmus Lerdorf
DéveloppeursThe PHP Group
Dernière version7.2.6 ()Voir et modifier les données sur Wikidata
TypageDynamique, Faible
Influencé parC/C++
Java
Perl [1]
Écrit enCVoir et modifier les données sur Wikidata
Système d'exploitationMulti-plateforme
LicenceLicence libre :
Licence PHP[2]
Site webphp.netVoir et modifier les données sur Wikidata
Extension de fichierphp, phtml, php4, php3, php5, phps et pharVoir et modifier les données sur Wikidata

PHP: Hypertext Preprocessor[3], plus connu sous son sigle PHP (acronyme récursif), est un langage de programmation libre[4], principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP[3], mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale. PHP est un langage impératif orienté objet.

PHP a permis de créer un grand nombre de sites web célèbres, comme Facebook, Wikipédiaetc.[5] Il est considéré comme une des bases de la création de sites web dits dynamiques mais également des applications web.

Histoire

Le langage PHP fut créé en 1994 par Rasmus Lerdorf pour son site web. C'était à l'origine une bibliothèque logicielle en C[6] dont il se servait pour conserver une trace des visiteurs qui venaient consulter son CV. Au fur et à mesure qu'il ajoutait de nouvelles fonctionnalités, Rasmus a transformé la bibliothèque en une implémentation capable de communiquer avec des bases de données et de créer des applications dynamiques et simples pour le Web. Rasmus décida alors en 1995 de publier son code, pour que tout le monde puisse l'utiliser et en profiter[7]. PHP s'appelait alors PHP/FI (pour Personal Home Page Tools/Form Interpreter). En 1997, deux étudiants, Andi Gutmans et Zeev Suraski, redéveloppèrent le cœur de PHP/FI. Ce travail aboutit un an plus tard à la version 3 de PHP, devenu alors PHP: Hypertext Preprocessor. Peu de temps après, Andi Gutmans et Zeev Suraski commencèrent la réécriture du moteur interne de PHP. Ce fut ce nouveau moteur, appelé Zend Engine — le mot Zend est la contraction de Zeev et Andi — qui servit de base à la version 4 de PHP[8].

Utilisation

Répartition des langages de programmation côté serveur des sites web, le 28 avril 2016.

En 2002, PHP est utilisé par plus de 8 millions de sites Web à travers le monde[9], en 2007 par plus de 20 millions[10] et en 2013 par plus de 244 millions[11].

De plus, PHP est devenu le langage de programmation web côté serveur le plus utilisé depuis plusieurs années :

Année Part de marché
2010 75 %
2013 75 %[12]
2016 82 %[13]

Enfin en 2010, PHP est le langage dont les logiciels open source sont les plus utilisés dans les entreprises, avec 57 % de taux de pénétration[14].

Versions

La version actuelle est la version 7.1.8, sortie le 3 août 2017[15]. Elle utilise Zend Engine 2 et introduit une modélisation objet plus performante, une gestion des erreurs fondée sur le modèle des exceptions, ainsi que des fonctionnalités de gestion pour les entreprises. PHP 5 apporte beaucoup de nouveautés, telles que le support de SQLite ainsi que des moyens de manipuler des fichiers et des structures XML basés sur libxml2 :

  • une API simple nommée SimpleXML ;
  • une API Document Object Model assez complète ;
  • une interface XPath utilisant les objets DOM et SimpleXML ;
  • intégration de libxslt pour les transformations XSLT via l'extension XSL ;
  • une bien meilleure gestion des objets par rapport à PHP 4, avec des possibilités qui tendent à se rapprocher de celles de Java.

Depuis juin 2011 et le nouveau processus de livraison de PHP[16], le cycle de livraison de PHP est d'une mise à jour annuelle comportant des changements fonctionnels importants, la durée de vie d'une branche est de 3 ans et trois branches stables sont maintenues. Cela signifie que lorsqu'une nouvelle version de PHP 5.x sort, la version 5.x-3 n'est plus supportée.

Depuis la sortie de PHP 5.6, la configuration est :

  • branche de développement : 7.1 ;
  • branches encore supportées (corrections de bugs et de la sécurité) : 7.0, 5.6 ;
  • toutes les branches < 5.6 ne sont plus supportées.

Il est à noter qu'historiquement, PHP disposait d'une configuration par défaut privilégiant la souplesse à la sécurité (par exemple register globals, qui a été activé par défaut jusqu'à PHP 4.2[17]). Cette souplesse a permis à de nombreux développeurs d'apprendre PHP mais le revers de la médaille a été que de nombreuses applications PHP étaient mal sécurisées. Le sujet a bien été pris en main par le PHPGroup qui a mis en place des configurations par défaut mettant l'accent sur la sécurité. Il en résultait une réputation de langage peu sécurisé, réputation d'insécurité qui n'a plus de raison d'être[réf. nécessaire].

Historique des versions

Historique des versions
Version majeure Version mineure Support Date de sortie Notes
1.0 1.0.0 Ancienne version, non supportée 8 juin 1995 Appelé officiellement "Personal Home Page Tools (PHP Tools)", outils pour page personnelle. C'est la première apparition du nom "PHP"[18].
2.0 2.0.0 Ancienne version, non supportée 12 novembre 1997
3.0 3.0.0 Ancienne version, non supportée 6 juin 1998 Passage d'une personne à une équipe de développeurs. Zeev Suraski et Andi Gutmans réécrivent la base de cette version[18].
4.0 4.0.0 Ancienne version, non supportée 22 mai 2000 Ajout d'un système d'analyse syntaxique plus avancé appelé le Zend Engine. Ce moteur procède en deux étapes d'analyse puis d'exécution.
4.1.0 Ancienne version, non supportée 10 décembre 2001 Introduit les superglobals ($_GET, $_POST, $_SESSION, etc.)
4.2.0 Ancienne version, non supportée 22 avril 2002 Désactive register_globals par default. Les données en provenance du réseau ne sont plus insérées directement dans l'espace de nom global, réduisant ainsi les possibilités de failles de sécurité
4.3.0 Ancienne version, non supportée 27 décembre 2002 Introduit le CLI, en addition au CGI.
4.4.0 Ancienne version, non supportée 11 juillet 2005 Ajout du manuel (pages accessibles par la commande man) pour les scripts phpize et php-config.
5.0 5.0.0 Ancienne version, non supportée 13 juillet 2004 Zend Engine II avec un nouveau modèle objet[19].
5.1 5.1.0 Ancienne version, non supportée 24 novembre 2005 Amélioration de performances par l'introduction de variables de compilation dans un moteur PHP repensé[19].
5.2 5.2.0 Ancienne version, non supportée 2 novembre 2006 Activation par défaut de l'extension «filter»[19].
5.3 5.3.0 Ancienne version, non supportée 30 juin 2009[20] Support des espaces de noms ; Late Static Bindings (résolution statique à la volée) ; étiquettes de saut (goto limité) ; fermetures (closures) ; Native PHP archives (phar) ; ramasse-miettes de références cycliques ; connexion persistante avec MySQLi, sqlite3 ; ajout de fileinfo en tant que remplacement de mime_magic pour un meilleur support de MIME ; raccourci pour l’opérateur ternaire (?:) ; fonctions anonymes ; nombreuses corrections de bug[21]...
5.3.3 Ancienne version, non supportée 22 juillet 2010 Introduit PHP-FPM[22]
5.4 5.4.0 Ancienne version, non supportée 1er mars 2012 Support des traits ; syntaxe courte des tableaux introduite ; accès aux index de tableaux en sortie de fonctions ; les fermetures supportent $this ; <?= toujours disponible ; accès aux attributs d'un objet dès l'instanciation ; ajout syntaxe Class::{expr}() ; ajout format de nombres binaires ; suivi des envois de fichiers via l'extension de session ; serveur web embarqué en CLI[23] dédié au développement ; support de Dtrace ; suppression des extensions magic quotes, safe_mode, register_globals et register_long_array[23].
5.4.26 Ancienne version, non supportée 6 mars 2014 Ajout de ldap_modify_batch()
5.5 5.5.0 Ancienne version, non supportée 20 juin 2013 Support des générateurs et des coroutines ; ajout d'une API de hachage des mots de passe ; intégration en standard du système de cache Zend OPcache[24] ; correction de nombreux bugs ; arrêt du support de Windows XP et Windows Server 2003 ; mise à jour de la bibliothèque GD ; les fonctions mysql_ sont maintenant considérées comme obsolètes (mise en avant de mysqli_ et de PDO_MySQL).
5.5.4 Ancienne version, non supportée 19 septembre 2013 Amélioration de fputcsv().
5.5.5 Ancienne version, non supportée 17 octobre 2013 Nouvelle fonction opcache_compile_file(), support du système GNU Hurd, ajout du type MIME application/pdf dans le serveur de développement.
5.5.6 Ancienne version, non supportée 14 novembre 2013 Amélioration des performances de array_merge() et func_get_args().
5.5.7 Ancienne version, non supportée 12 décembre 2013 Ajout du support de getallheaders() et de types MIME dans le serveur de développement, ajout de apache_response_headers().
5.5.10 Ancienne version, non supportée 6 mars 2014 Passage à PCRE 8.34. Ajout de ldap_modify_batch()
5.5.13 Ancienne version, non supportée 29 mai 2014 Ajout des types MIME xsl/xml au serveur de développement intégré.
5.6 5.6.0 Ancienne version, correctifs de sécurité uniquement 28 août 2014 Nouvelle syntaxe pour les fonctions à paramètres variables et dépaquetage de paramètres, importation de fonctions au sein d'espaces de noms, intégration du débogueur phpdbg en standard, amélioration de l'extension zip, expressions acceptées pour la définition de constantes, amélioration de la gestion des données POST, support de la surcharge d'opérateurs dans le Zend Engine, nouvelle méthode magique __debugInfo() fournissant des informations de débogage sur les objets, améliorations diverses sur le support de SSL/TLS, ajout de l'opérateur d'exponentiation « ** », téléchargements de poids supérieur à 2 Go désormais supportés.
5.6.32 Ancienne version, correctifs de sécurité uniquement 26 octobre 2017 Correction de 3 bugs (Date, mcrypt, PCRE)
5.6.33 Ancienne version, correctifs de sécurité uniquement 04 janvier 2018 Correction de 2 bugs (GD, Phar)
7.0 7.0.0 Ancienne version, améliorations et correctifs de sécurité 3 décembre 2015 Performance améliorée grâce au moteur « phpng » (jusqu'à deux fois plus rapide que PHP 5.6), support homogène des architectures 64 bits, ajout d'exceptions permettant d'intercepter des erreurs fatales, ajout des opérateurs « ?? » (dit «  null coalescing (en) ») et « <=> » (dit « combined comparison »), possibilité de déclarer explicitement le type retourné par une fonction ainsi que les types scalaires des arguments, support des classes anonymes[25]...
7.0.25 Ancienne version, améliorations et correctifs de sécurité 26 octobre 2017[26] Correction de 14 bugs.
7.0.26 Ancienne version, améliorations et correctifs de sécurité 23 novembre 2017[27] Correction de 18 bugs.
7.0.27 Ancienne version, améliorations et correctifs de sécurité 04 janvier 2018 Correction de 11 bugs.
7.0.28 Ancienne version, améliorations et correctifs de sécurité 27 février 2018 Correction de bugs.
7.1 7.1.0 Ancienne version, améliorations et correctifs de sécurité 1er décembre 2016 Types nullables (en), type de retour void, pseudo-type iterable, visibilité des constantes de classes, améliorations de list(), catch de plusieurs types d'exception, etc.[28]
7.1.1 Ancienne version, améliorations et correctifs de sécurité 19 janvier 2017[29] Correction de 33 bugs et optimisation mémoire de mysqlnd.
7.1.3 Ancienne version, améliorations et correctifs de sécurité 16 mars 2017[30] Correction de 24 bugs.
7.1.11 Ancienne version, améliorations et correctifs de sécurité 27 octobre 2017[31] Correction de 19 bugs.
7.1.12 Ancienne version, améliorations et correctifs de sécurité 23 novembre 2017[32] Correction de 18 bugs.
7.1.13 Ancienne version, améliorations et correctifs de sécurité 04 janvier 2018 Correction de 20 bugs.
7.1.14 Ancienne version, améliorations et correctifs de sécurité 01 février 2018 Correction de bugs.
7.1.15 Version future Future version de PHP 7.1 2 mars 2018 Correction de bugs et correctif de sécurité[33].
7.2 7.2.0 Version actuelle, améliorations et correctifs de sécurité 30 novembre 2017[34] Dernière version de PHP 7. Correction de bugs (voir changelog)
7.2.1 Version actuelle, améliorations et correctifs de sécurité 4 janvier 2018[35] Correction de 21 bugs.
7.2.2 Version actuelle, améliorations et correctifs de sécurité 1er février 2018[35] Correction de 25 bugs.
7.2.3 Version future ?? ?? 2018[35] Future version de PHP 7.2.

PHP 6 et Unicode

En 2005, le projet de faire de PHP un langage fonctionnant d'origine en Unicode a été lancé par Andrei Zmievski, ceci en s'appuyant sur la bibliothèque International Components for Unicode (ICU) et en utilisant UTF-16 pour représenter les chaînes de caractères dans le moteur[36].

Étant donné que cela représentait un changement majeur tant dans le fonctionnement du langage que dans le code PHP créé par ses utilisateurs, il fut décidé d'intégrer cela dans une nouvelle version 6.0 avec d'autres fonctionnalités importantes alors en développement[37]. Toutefois, le manque de développeurs experts en Unicode ainsi que les problèmes de performance résultant de la conversion des chaînes de et vers UTF-16 (rarement utilisé dans un contexte web), ont conduit au report récurrent de la livraison de cette version[38]. Par conséquent, une version 5.3 fut créée en 2009 intégrant de nombreuses fonctionnalités non liées à Unicode qui était initialement prévues pour la version 6.0, notamment le support des espaces de nommage (namespaces) et des fonctions anonymes. En mars 2010, le projet 6.0 intégrant unicode fut abandonné et la version 5.4 fut préparée afin d'intégrer la plupart des fonctionnalités non liées à l'unicode encore dans la branche 6.0, telles que les traits ou l'extension des closures au modèle objet[39].

Le projet est depuis passé à un cycle de livraison prévisible (annuel) contenant des avancées significatives mais contenues tout en préservant au maximum la rétro-compatibilité avec le code PHP existant (5.4 en 2012, 5.5 en 2013, 5.6 prévue pour l'été 2014). Depuis janvier 2014[40], l'idée d'une nouvelle version majeure introduisant Unicode mais se basant sur UTF-8 (largement devenu depuis le standard du Web pour l'Unicode) et permettant certains changements pouvant casser la rétro-compatibilité avec du code PHP ancien est de nouveau discutée et les RFC sont maintenant triées selon leur implémentation en 5.x (évolutions ne causant pas ou marginalement de cassure de la rétro-compatibilité) ou dans la future version majeure (évolutions majeures du moteur et évolutions impliquant une non-compatibilité ascendante).

PHP 7

Au vu des orientations différentes prises par le langage de celles prévues par PHP 6, une partie des développeurs propose de nommer la version succédant à PHP 5 « PHP 7 » au lieu de « PHP 6 ». Un vote parmi les développeurs valide cette proposition par 58 voix contre 24[41].

La nouvelle version propose une optimisation du code et, d'après la société Zend, offre des performances dépassant celles de machines virtuelles comme HHVM[42],[43]. Les benchmarks externes montrent des performances similaires pour HHVM et PHP 7, avec un léger avantage d'HHVM dans la plupart des scénarios[44].

Other Languages
Afrikaans: PHP
Alemannisch: PHP
aragonés: PHP
العربية: بي إتش بي
asturianu: PHP
azərbaycanca: PHP
Boarisch: PHP
žemaitėška: PHP
беларуская: PHP
беларуская (тарашкевіца)‎: PHP
български: PHP
বাংলা: পিএইচপি
brezhoneg: Lavar PHP
bosanski: PHP
català: PHP
Mìng-dĕ̤ng-ngṳ̄: PHP
нохчийн: PHP
Cebuano: PHP
کوردی: پی ئێچ پی
čeština: PHP
Cymraeg: PHP
dansk: PHP
Deutsch: PHP
Ελληνικά: PHP
English: PHP
Esperanto: PHP
español: PHP
eesti: PHP
euskara: PHP
فارسی: پی‌اچ‌پی
suomi: PHP
Võro: PHP
galego: PHP
客家語/Hak-kâ-ngî: PHP
עברית: PHP
हिन्दी: पीएचपी
hrvatski: PHP
magyar: PHP
Հայերեն: PHP
interlingua: PHP
Bahasa Indonesia: PHP
Ido: PHP
íslenska: PHP
italiano: PHP
Basa Jawa: PHP
ქართული: PHP
Taqbaylit: PHP
қазақша: PHP
ភាសាខ្មែរ: ភីអេចភី
ಕನ್ನಡ: ಪಿ ಎಚ್ ಪಿ
한국어: PHP
kurdî: PHP
Кыргызча: PHP
Latina: PHP
Lëtzebuergesch: PHP
Lingua Franca Nova: PHP
lumbaart: PHP
lietuvių: PHP
latviešu: PHP
Malagasy: PHP
македонски: PHP
മലയാളം: പി.എച്ച്.പി.
монгол: PHP
मराठी: पीएचपी
Bahasa Melayu: PHP
မြန်မာဘာသာ: PHP
Plattdüütsch: PHP
नेपाली: पिएचपी
Nederlands: PHP
norsk nynorsk: PHP
norsk: PHP
occitan: PHP
polski: PHP
português: PHP
română: PHP
русский: PHP
संस्कृतम्: पी एच् पी
саха тыла: PHP
Scots: PHP
srpskohrvatski / српскохрватски: PHP
සිංහල: PHP
Simple English: PHP
slovenščina: PHP
shqip: PHP
српски / srpski: PHP
svenska: PHP
தமிழ்: பி.எச்.பி
тоҷикӣ: PHP
Türkmençe: PHP
Tagalog: PHP
Türkçe: PHP
українська: PHP
oʻzbekcha/ўзбекча: PHP
Tiếng Việt: PHP
West-Vlams: PHP
Winaray: PHP
Wolof: PHP
吴语: PHP
ייִדיש: PHP
中文: PHP
Bân-lâm-gú: PHP
粵語: PHP