Skip to content

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

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

mermaid
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 --> client

Quelques explications

  1. Le navigateur envoie une requête HTTP au serveur (par exemple : GET /index.php).
  2. Le serveur HTTP (Apache ou Nginx) détecte un fichier PHP et transmet la requête à l’interpréteur PHP (Zend Engine).
  3. 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.
  4. 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.
  5. Le moteur PHP génère une sortie (souvent HTML), qui est renvoyée au serveur web.
  6. 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.