| Fiche technique | |
|---|---|
| Type de produit : | Langage de programmation |
| Auteur : | Rasmus Lerdorf |
| Date de publication : | 1994 |
| Licence : | PHP License |
Introduction
Le langage PHP est l'abréviation de «PHP: Hypertext Preprocessor», mais les deux premières versions, l'abréviation était Personal Home Page. Il a été inventé en 1994 par Rasmus Lerdorf.
A l'origine se langage de programmation a été développé pour des serveurs Web, afin qu'il soit plus facile que le langage de programmation Perl pour le développement de page Web. Ce n'est que très récemment qu'il a été porté pour .NET sous le nom de Phalanger, le projet Quercus (pour exécuter du PHP en Java, pour s'héberger sous Google App Engine par exemple) ou Delphi for PHP (version mélangeant à la fois Delphi pour les composantes comme IntraWeb et PHP), mais il ne s'agit pas de son orientation principal. Les versions suivi, par la communauté, sont davantage 3, 4, 5 et 7 destiné uniquement pour le Web et ils l'utilisent en grande majorité avec MySQL.
Points fort et points faibles
Tout d'abord, voici les avantages de se langage de programmation :
- Il est gratuit : On peut l'installer et le déployer sur autant de serveurs que souhaités sans payer un sous.
- Portable : Il fonctionne sous presque tous les systèmes d'exploitation : Windows 95 (jusqu'à la version 4.3.0), Windows 98 (jusqu'à la version 5.3.0), Windows Me (jusqu'à la version 5.3.0), Windows NT4 Server (jusqu'à la version 5.3.0), Windows 2000 Server, Windows 2000 Professionnel, Windows XP, Windows Server 2003, Windows Server 2008, Windows 7, Windows 10, Windows 11, Mac OS X, OS/2, eComStation, Unix, Linux et Solaris.
- Open Source : Les sources sont disponibles et modifiables.
- Il est très populaires : Il y a donc beaucoup d'exemples (voir le site de PHP.net), de cadre d'applications et de projets disponible gratuitement.
- Langage configurable : Le PHP charge un fichier de configuration php.ini lequel permet un haut niveau de configuration.
Enfin, voici les désavantages de se langage de programmation :
- Les sessions sont simples processus : Donc, si par exemple vous ajouter une fonction «session_start()» au début de votre page PHP et que vous effectuez un «exec» durant 20 secondes, il exécutera les exec une à la suite des autres plutôt que tous en même temps. Par exemple, il sera écoulé 60 secondes pour 3 appels exec plutôt que 20 secondes. Ce phénomène ne se produit que si vous indiquez une session.
- Les fonctions sont biodégradables : Environ 500 fonctions sont obsolètes depuis sa version 3, sachant qu'il y a environ 5 000 fonctions, ceci indiquant une volatilité de 10%.
- Le langage de programmation est interprété et donc il est moins rapide qu'un langage compilé.
Les possibilités d'extensibilité
Le PHP n'a pas jusqu'à maintenant de balise intégré, par contre il est possible de combiné les balises ESI (esi:attempt, esi:include, esi:try,...) avec les pages PHP si vous utilisez un serveur Web Apache Traffic Server (TS) avec l'«ESI plugin». Cette possibilité peut s'avérer fort ingénieuse pour des sites avec des générations de contenu et un traffic très élévé (voir Articles - Optimisation pour des sites à haut niveau de trafic).
Les versions
Les versions sont une véritable mélange de superposition entre les sous-versions. Tout d'abord, la version 4 et la version 5 se sont chevauchées pendant un bon moment et il règne une certaine confusion entre les sous-versions des deux. Ensuite, la version PHP6 fut abonnées il y a une année. Cela mit un doute sur l'avenir du PHP. En attendant, bien que Facebook et le projet Drupal (CMS) les font vivres, les sous-versions de PHP on prit le relais.
La version 5.3 amène les espaces de noms (namespace) comme l'a proposé le .NET avec C#, VB .NET et Visual C++ .NET. Cette possibilité offre la possibilité d'empiler plein de projet en conflit entre eux et d'en faire une solution unique. Cette astuce peut être intéressante pour des gros projets mais en même temps peut ajouter de la médiocrité par une redondance de certains projets fusionner à toute hâte. Un projet utilisant cette caractéristiques c'est bien sûre Assetic for Asset Management de Symfony et ayant justement une lourdeur en terme d'espace disque assez imposante.
Voici les versions les plus communes de PHP :
| Version | Date de publication | Commentaires | |
|---|---|---|---|
| 1.0.0 | 8 juin 1995 | Première publication publique de PHP, alors appelé Personal Home Page Tools. | |
| 2.0.0 | 12 novembre 1997 | Version connue sous le nom PHP/FI 2.0, intégrant davantage de fonctions pour les formulaires et les bases de données. | |
| 3.0.0 | 6 juin 1998 | Réécriture importante du langage par Zeev Suraski et Andi Gutmans, marquant le début du PHP moderne. | |
| 4.0.0 | 22 mai 2000 | Première version reposant sur le moteur Zend Engine. | |
| 4.1.0 | 10 décembre 2001 | Introduction des superglobales comme $_GET, $_POST et $_SESSION. | |
| 4.2.0 | 22 avril 2002 | Modification importante de sécurité avec register_globals désactivé par défaut. | |
| 4.3.0 | 27 décembre 2002 | Introduction de l'interface en ligne de commande CLI. | |
| 4.4.0 | 11 juillet 2005 | Version de stabilisation de la branche PHP 4. | |
| 4.4.8 | 3 janvier 2008 | Version corrective tardive de la branche PHP 4.4. | |
| 4.4.9 | 7 août 2008 | Dernière version officielle de PHP 4. | |
| 5.0.0 | 13 juillet 2004 | Première version de PHP 5, avec le Zend Engine II et un modèle objet amélioré. | |
| 5.1.0 | 24 novembre 2005 | Amélioration du moteur, de PDO et des performances générales. | |
| 5.2.0 | 2 novembre 2006 | Ajout de nouvelles extensions et amélioration du support JSON. | |
| 5.2.8 | 8 décembre 2008 | Version corrective de la branche PHP 5.2. | |
| 5.2.9 | 26 février 2009 | Version de maintenance de PHP 5.2. | |
| 5.2.10 | 18 juin 2009 | Correctifs de stabilité et de sécurité. | |
| 5.2.11 | 17 septembre 2009 | Version corrective de maintenance. | |
| 5.2.12 | 17 décembre 2009 | Correctifs de bogues dans la branche 5.2. | |
| 5.2.13 | 25 février 2010 | Version corrective de PHP 5.2. | |
| 5.2.14 | 22 juillet 2010 | Correctifs de sécurité et de stabilité. | |
| 5.2.15 | 9 décembre 2010 | Version de maintenance. | |
| 5.2.16 | 16 décembre 2010 | Correctif publié peu après PHP 5.2.15. | |
| 5.2.17 | 6 janvier 2011 | Dernière version officielle de la branche PHP 5.2. | |
| 5.3.0 | 30 juin 2009 | Ajout des espaces de noms, des fermetures, de late static binding et d'autres nouveautés majeures. | |
| 5.3.1 | 19 novembre 2009 | Version corrective de PHP 5.3. | |
| 5.3.2 | 4 mars 2010 | Correctifs de bogues et de sécurité. | |
| 5.3.3 | 22 juillet 2010 | Version de maintenance de la branche 5.3. | |
| 5.3.4 | 10 décembre 2010 | Correctifs de sécurité et de stabilité. | |
| 5.3.5 | 6 janvier 2011 | Version corrective. | |
| 5.3.6 | 17 mars 2011 | Correctifs et améliorations internes. | |
| 5.3.7 | 18 août 2011 | Version corrective de PHP 5.3. | |
| 5.3.8 | 23 août 2011 | Correction rapide après PHP 5.3.7. | |
| 5.3.9 | 10 janvier 2012 | Version de maintenance. | |
| 5.3.10 | 2 février 2012 | Correctifs de sécurité. | |
| 5.3.11 | 26 avril 2012 | Version corrective. | |
| 5.3.12 | 3 mai 2012 | Correctif de maintenance. | |
| 5.3.13 | 8 mai 2012 | Version corrective publiée rapidement après PHP 5.3.12. | |
| 5.3.14 | 14 juin 2012 | Correctifs de bogues et de sécurité. | |
| 5.4.0 | 1er mars 2012 | Ajout des traits, du serveur Web intégré et de la syntaxe courte des tableaux. | |
| 5.4.1 | 26 avril 2012 | Version corrective de PHP 5.4. | |
| 5.4.2 | 3 mai 2012 | Correctif de maintenance. | |
| 5.4.3 | 8 mai 2012 | Version corrective. | |
| 5.4.4 | 14 juin 2012 | Correctifs de bogues et de sécurité. | |
| 5.4.4 | 14 juin 2012 | Ajout des générateurs, du bloc finally et de l'API password_hash. | |
| 5.5 | 20 juin 2013 | Ajout des fonctions variadiques, du déballage d'arguments et d'améliorations syntaxiques. | |
| 5.6.0 | 28 août 2014 | Version corrective de la branche PHP 5.6. | |
| 5.6.17 | 7 Janvier 2016 | Première version de PHP 7, avec Zend Engine 3 et de fortes améliorations de performances. | |
| 7.0.0 | 3 décembre 2015 | Première version de PHP 7, avec Zend Engine 3 et de fortes améliorations de performances. | |
| 7.0.1 | 17 décembre 2015 | Première version corrective de PHP 7.0. | |
| 7.0.2 | 7 Janvier 2016 | Version corrective de la branche PHP 7.0. | |
| 7.0.3 | 31 mars 2016 | Première mise à jour corrective importante de la branche PHP 7.0. | |
| 7.1.0 | 1 décembre 2016 | Introduction des types nullable (?Type), du type de retour void, des constantes de classe avec visibilité et de nombreuses améliorations des performances. | |
| 7.2.0 | 30 novembre 2017 | Ajout du type object, intégration de la bibliothèque de chiffrement libsodium, amélioration des extensions et optimisations du moteur Zend. | |
| 7.3.0 | 6 décembre 2018 | Amélioration des syntaxes Heredoc et Nowdoc, nouvelles fonctions JSON, meilleure gestion de la mémoire et optimisation des performances. | |
| 7.4.0 | 28 novembre 2019 | Introduction des propriétés typées, des fonctions fléchées (Arrow Functions), du préchargement (Preloading) et des références faibles (Weak References). | |
| 8.0.0 | 26 novembre 2020 | Première version majeure de PHP 8. Introduction du compilateur JIT (Just-In-Time), des types union, des attributs (Attributes), des expressions match et de nombreuses améliorations du langage. | |
| 8.1.0 | 25 novembre 2021 | Introduction des énumérations (Enums), des fibres (Fibers), des propriétés readonly, des types intersection et de nombreuses optimisations du moteur. | |
| 8.2.0 | 8 décembre 2022 | Ajout des classes readonly, des types en forme normale disjonctive (DNF), de nouvelles optimisations et dépréciation des propriétés dynamiques. | |
| 8.3.0 | 23 novembre 2023 | Introduction des constantes de classe typées, amélioration des exceptions DateTime, nouvelles fonctions et optimisations générales du langage. | |
| 8.4.0 | 21 novembre 2024 | Introduction des Property Hooks, de la visibilité asymétrique des propriétés, de nouvelles fonctions de manipulation des tableaux et de nombreuses améliorations de performances. | |
| 8.5.0 | 20 novembre 2025 | Dernière version majeure. Amélioration du système de types, nouvelles optimisations du compilateur, amélioration de l'expérience de développement et nouvelles fonctionnalités du langage. | |
| ... | ... | ... |
Remarque
- PHP vs Java : Une différence majeure dans la logique du langage de programmation PHP par rapport à celle de Java, c'est qu'il est très permissif par rapport au langage de programmation Java, lequel est très strict dans ses contrôles. Ainsi, en Java, le code arrête lorsqu'une omission est présente tandis que le PHP continuera son cheminement.
PHP6
Étant donné l'abandon du PHP6, les développeurs de PHP se retrouvaient coincé avec un produit n'évoluant plus vraiment. Il fallait donc élevé nos horizons vers des concurrents mais partenaire de PHP. La meilleure optique dans ce sens, c'était bien sûre HipHop for PHP de Facebook (aussi connu sous le nom de Hphp). Il s'agissait d'un moteur de script PHP complètement redéveloppé par Facebook, lequel était une version beaucoup plus performantes que le moteur PHP, car il transforme le code PHP en C++ optimisé. Il s'agissait sens nulle doute de la meilleure optique en terme d'avenir pour le PHP en se moment là. Cependant, Facebook a également créer un langage de programmation du nom Hack fortement inspiré du PHP, il aurait pu également s'agir d'une solution d'avenir...
PHP7
Le PHP apporte des améliorations considérables au niveau des applications avec de nombreux fichiers et des classes complexes, ainsi des projets comme Drupal s'en retrouve grandement accéléré. De plus, l'écart de performance existant avec la version HipHop for PHP de Facebook est enfin rattrapé.
Cadres d'application
Voici quelques cadres d'applications (Framework) utilisable avec le PHP :
| Nom | Description | Compatibilité |
|---|---|---|
| Agavi | Développer selon une conception de modèle Modèle-Vue-Contrôleur (MVC) | PHP5+ |
| Akelos | Développer selon une conception de modèle Modèle-Vue-Contrôleur (MVC) avec AJAX | PHP4+ |
| AWF | Gestionnaire de contenu ayant évolué vers un cadre d'application (Framework) | PHP5+ |
| CakePHP | Conception selon le modèle Modèle-Vue-Contrôleur (MVC), style Ruby on Rails. | PHP4+ |
| Castor | Créer par la société 2LE pour les entreprises, très simple mais efficace. | PHP4+ |
| Cerebral Cortex | Développement d'application rapidement | PHP5+ |
| Code Igniter | Basé sur une boite à outils | PHP4+ |
| Copix | Développer en 5 couches et entièrement POO | PHP4+ |
| Graniware | Le portail communautaire Limousin | PHP4+ |
| Laravel | Cadre d'application MVC | PHP5.6+ |
| PEAR | La référence des cadres d'applications (Framework) | PHP4+ |
| Portix-PHP | Utilise aucune base de données mais un système de fichier texte | PHP4+ |
| QCodo | Développer selon une conception de modèle Modèle-Vue-Contrôleur (MVC) | PHP5+ |
| Symfony | Développer selon une conception de modèle Modèle-Vue-Contrôleur (MVC) | PHP5+ |
| Zend Framework | Très professionnel et puissant. Supporté par Zend et IBM | PHP5.1.4+ |
Code source
Voici des exemples de code source d'utilitaires pour manipuler le PHP :
| Lien | Langage de programmation | Description | Projet | Syntaxe |
|---|---|---|---|---|
| ASC2PHP.PAS | Free Pascal, Turbo Pascal | Cette commande permet de convertir un fichier ASCII en code source PHP. | DEV-COOLS | ASC2PHP |
| PHP86.PAS | Free Pascal, Turbo Pascal | Cette commande permet de lancer le compilateur PHP pour l'assembleur du microprocesseur 8086 ou 8088. | DEV-COOLS | PHP86 |