Introduction à PHP
PHP (PHP Hypertext Preprocessor) est un langage de programmation destiné à la réalisation de pages web dynamiques dont les possibilités s’étendent notamment à la manipulation d’images, de fichiers pdf, ou encore la communication avec des webservices.
Historique de PHP
Voici son évolution depuis ses débuts :
- 1995 : Création par Rasmus Lerdorf. PHP est alors une simple librairie Perl pour gérer des pages personnelles.
- 1997 : Naissance de PHP/FI (Personal Home Page / Forms Interpreter), réécrit en C, syntaxe proche de Perl. PHP 3.0 est lancé, 10 % du web l’utilise.
- 2000 : Lancement de PHP 4.0 : meilleure sécurité, gestion des sessions. Large adoption dans le monde web.
- 2004 : Sortie de PHP 5, avec le Zend Engine 2. Arrivée de la programmation orientée objet, support natif de XML, JSON.
- 2010 : Le projet PHP 6 est abandonné, mais plusieurs de ses idées sont intégrées à PHP 5.x.
- 2015 : Lancement de PHP 7. Nouveau moteur Zend Engine, exécution optimisée via une machine virtuelle. Support des classes anonymes, nouveaux opérateurs, meilleures performances.
- 2020+ : PHP 8 introduit le JIT, le typage renforcé, les attributs, les expressions match et bien d'autres nouveautés modernes.
gitGraph
commit
branch hotfix
checkout hotfix
commit
branch develop
checkout develop
commit id:"ash"
branch featureB
checkout featureB
commit type:HIGHLIGHT
checkout main
checkout hotfix
commit type:NORMAL
checkout develop
commit type:REVERSE
checkout featureB
commit
checkout main
merge hotfix
checkout featureB
commit
checkout develop
branch featureA
commit
checkout develop
merge hotfix
checkout featureA
commit
checkout featureB
commit
checkout develop
merge featureA
branch release
checkout release
commit
checkout main
commit
checkout release
merge main
checkout develop
merge releaseArchitecture typique
PHP n’est pas compilé en exécutable autonome comme le C, mais il est compilé dynamiquement à l’exécution en OpCodes, une forme de bytecode interne interprétée par le Zend Engine.
Depuis PHP 7, ce bytecode peut être mis en cache (Opcache) pour éviter de recompiler à chaque requête.
Avec PHP 8, une partie de ces OpCodes peut être convertie en code machine natif via le mécanisme JIT (Just-In-Time Compilation), ce qui améliore les performances sur certains types de charges.
flowchart TD
client["Navigateur"]
server["Serveur HTTP (Apache ou Nginx)"]
php["Interpréteur PHP (Zend Engine)"]
ast["Analyse syntaxique"]
opcodes["Compilation en OpCodes"]
jit["Opcache / JIT"]
exec["Exécution du code"]
files["Fichiers (PHP, JSON, HTML)"]
db["Base de données"]
client --> server
server --> php
php --> ast --> opcodes --> jit --> exec
exec --> files
exec --> db
exec --> server
server --> clientQuelques explications
- Le navigateur envoie une requête HTTP au serveur (par exemple :
GET /index.php). - Le serveur HTTP (Apache ou Nginx) détecte un fichier PHP et transmet la requête à l’interpréteur PHP (Zend Engine).
- Le moteur PHP (Zend Engine) effectue plusieurs traitements :
- Analyse syntaxique : le code source est transformé en arbre syntaxique (AST).
- Compilation : l’AST est transformé en OpCodes, des instructions bas niveau interprétables par Zend.
- Mise en cache des OpCodes : Opcache permet de réutiliser ces instructions sans recompiler à chaque fois.
- Si PHP 8+, les OpCodes peuvent être compilés à la volée (Just-In-Time) pour améliorer les performances.
- L’exécution du code PHP est lancée :
- Chargement ou écriture de fichiers (JSON, HTML, etc.).
- Requêtes à une base de données via PDO.
- Le moteur PHP génère une sortie (souvent HTML), qui est renvoyée au serveur web.
- Le serveur HTTP envoie la réponse au navigateur client, qui affiche le contenu.
Pourquoi c’est utile à connaître ?
- Pour comprendre où se situe chaque problème potentiel (réseau, code, base, etc.).
- Pour écrire un code structuré et séparer clairement logique métier, données, et affichage.
- Pour déboguer plus efficacement (ex : comprendre pourquoi un fichier JSON n’est pas à jour).
- Pour optimiser les performances :
- Utiliser Opcache correctement,
- Réduire les accès fichiers ou base,
- Comprendre le rôle du JIT à partir de PHP 8.