Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 117 minIntermédiaire

C'est quoi PHP ? Installer PHP 8.5 et MySQL

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • expliquer ce que fait PHP entre le navigateur et la base de données ;
  • choisir une version de PHP maintenue ;
  • installer un environnement avec le serveur intégré, Laragon ou Docker ;
  • écrire un premier script et lire un message d'erreur.

3 exercices corrigés1 schéma

PHP est un langage de programmation qui s'exécute sur le serveur web : il fabrique la page HTML (ou les données JSON) que le serveur renvoie au navigateur, le plus souvent à partir d'informations lues dans une base de données MySQL. Ce chapitre explique comment PHP fonctionne, quelle version utiliser en 2026, comment installer un environnement de développement sur ta machine et comment écrire ton premier script.

Comment PHP fonctionne côté serveur

Quand tu tapes l'adresse d'une page PHP, ton navigateur envoie une requête HTTP au serveur web (Apache, Nginx, ou le petit serveur intégré à PHP). Le serveur voit que le fichier demandé se termine par .php : au lieu de l'envoyer tel quel, il le confie à l'interpréteur PHP. Le script s'exécute, interroge la base de données si besoin, et produit du texte, en général du HTML. C'est ce texte, et lui seul, que le serveur renvoie dans la réponse HTTP.

côté clientcôté serveur : le code PHP ne quitte jamais cette zoneNavigateuraffiche le HTMLServeur webApache, Nginxou php -SPHPexécutele scriptMySQLles données1234561requête HTTP : GET /materiels.php2le fichier .php est confié à PHP3le script envoie ses requêtes SQL4MySQL renvoie les lignes demandées5le script produit du HTML (ou du JSON)6réponse HTTP : le HTML seulPuis toutes les variables du script disparaissent : la requête suivante repart de zéro.
Le cycle d'une requête PHP : le navigateur ne reçoit jamais le code PHP, seulement ce qu'il produit.

Trois conséquences à retenir dès maintenant :

  • Le code PHP reste sur le serveur. Un visiteur qui affiche le code source de la page voit le HTML produit, jamais tes requêtes SQL ni tes mots de passe de connexion. C'est pour cela que la logique et les contrôles de sécurité se font en PHP, et pas seulement en JavaScript.
  • Chaque requête repart de zéro. Le script s'exécute du début à la fin, renvoie sa réponse, et toutes ses variables disparaissent. Pour se souvenir d'un utilisateur d'une page à l'autre, il faut une session ; pour garder des données, une base de données.
  • PHP ne s'exécute pas dans le navigateur. Un clic sur un bouton ne lance du PHP que s'il envoie une nouvelle requête au serveur : un lien, un formulaire, ou un appel fetch() en JavaScript vers une adresse PHP (fetch en JavaScript).

PHP en 2026 : quelle version choisir

Une nouvelle version de PHP sort chaque année, fin novembre. Chaque version reçoit deux ans de corrections de bogues, puis deux ans de correctifs de sécurité seulement. Après, elle n'est plus maintenue : une faille découverte ne sera jamais corrigée.

VersionSortieCorrections de bogues jusqu'auSécurité jusqu'auNouveautés marquantes
PHP 8.3novembre 202331 décembre 202531 décembre 2027Constantes de classe typées, json_validate()
PHP 8.4novembre 202431 décembre 202631 décembre 2028Property hooks, visibilité asymétrique, array_find(), coût bcrypt relevé à 12
PHP 8.5novembre 202531 décembre 202731 décembre 2029Opérateur pipe |>, array_first() et array_last(), extension URI
PHP 8.6prévue le 19 novembre 2026En cours de finalisation

Ce cours utilise PHP 8.5, la version stable la plus récente. Tout le code fonctionne aussi en PHP 8.4, sauf les quelques lignes signalées « PHP 8.5 ». Les versions 7.x, 8.0 et 8.1 ne sont plus maintenues, et PHP 8.2 ne reçoit plus que des correctifs de sécurité jusqu'à fin 2026 : si ton hébergeur ou ton établissement les utilise encore, demande une mise à jour.

PHP au BTS SIO

PHP n'est pas imposé par le référentiel, mais c'est le langage serveur le plus courant dans les réalisations SLAM, et l'un des plus fréquents, avec Java, dans les extraits de code des sujets d'écrit. Tu le croises à trois endroits :

  • Dans tes réalisations professionnelles : beaucoup d'applications web du portfolio sont écrites en PHP avec une base MySQL ou MariaDB. Le bloc 2 SLAM attend que tu saches développer la partie serveur, gérer la persistance des données et sécuriser ton code.
  • À l'épreuve E6 SLAM, pendant l'heure de réalisation, tu fais évoluer ta propre application : ajouter un champ, un filtre, une page, une règle de gestion (la phase 2 de l'E6).
  • À l'écrit E7 SLAM (Cybersécurité des services informatiques), les sujets donnent des extraits de code PHP à lire et à corriger : une requête vulnérable à l'injection, un mot de passe mal stocké, un contrôle d'accès oublié (sécuriser du code à l'E7).

Ce cours enseigne PHP natif, sans framework : tu écris toi-même le routage, l'accès aux données et la sécurité. C'est ce qui te permet de comprendre ce que fait chaque ligne, de lire n'importe quel code PHP à l'écrit, et de corriger ton application en une heure à l'E6.

Installer ton environnement de développement

Pour développer en PHP, il te faut trois choses sur ta machine : PHP lui-même, un serveur web et un SGBD (MySQL ou MariaDB). Quatre façons de les obtenir :

SolutionSystèmesCe qu'elle fournitPour qui
PHP en ligne de commande et son serveur intégréWindows, macOS, LinuxPHP seul ; le serveur web intégré (php -S) suffit pour développerTout le monde, en complément d'une base MySQL installée à part
LaragonWindowsApache ou Nginx, PHP 8.1 à 8.5, MySQL 8.4 ou 9, phpMyAdmin, HeidiSQLLe plus confortable sous Windows ; gratuit pour un usage non commercial (une fenêtre rappelle la licence à chaque démarrage)
XAMPP, WampServerWindows (XAMPP aussi sous Linux et macOS)Apache, PHP, MariaDB ou MySQL, phpMyAdminLes piles historiques des salles de TP ; vérifie la version de PHP fournie
Docker et Docker ComposeWindows, macOS, LinuxUn conteneur PHP et Apache, un conteneur MySQLPour avoir exactement l'environnement du serveur de production, et le partager avec ton équipe

Pour installer PHP seul : brew install php sous macOS, sudo apt install php-cli php-mysql sous Debian ou Ubuntu (Debian 13 fournit PHP 8.4), ou l'archive de windows.php.net sous Windows, dont tu ajoutes le dossier à la variable PATH. Vérifie ensuite :

bash
php -v                 # la version : PHP 8.5.x
php -m                 # les extensions chargées : cherche pdo_mysql
php --ini              # le fichier php.ini utilisé

Le serveur web intégré de PHP

PHP contient un petit serveur web, prévu pour le développement. Place-toi dans le dossier de ton projet et lance :

bash
php -S localhost:8000 -t public

Ton site répond à l'adresse http://localhost:8000, et le terminal affiche chaque requête reçue. L'option -t public désigne la racine du site (document root) : seuls les fichiers de ce dossier sont accessibles depuis le navigateur. Tu verras au chapitre 12 pourquoi il est important que ton code et ta configuration soient hors de ce dossier.

Docker : PHP 8.5, Apache et MySQL 8.4

Avec Docker, tout l'environnement est décrit dans deux fichiers à la racine du projet. Le Dockerfile part de l'image officielle PHP avec Apache, y ajoute le pilote MySQL de PDO et fait du dossier public la racine du site :

dockerfile
FROM php:8.5-apache

# Le dossier public devient la racine du site
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
 && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
 && a2enmod rewrite \
 && docker-php-ext-install pdo_mysql \
 && cp "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

Le fichier compose.yaml lance deux conteneurs, l'application et la base :

yaml
services:
  web:
    build: .
    ports:
      - "8080:80"
    volumes:
      - ./:/var/www/html
    environment:
      DB_HOST: db
      DB_NAME: pretmat
      DB_USER: pretmat_app
      DB_PASSWORD: ${DB_PASSWORD}
    depends_on:
      - db

  db:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_DATABASE: pretmat
      MYSQL_USER: pretmat_app
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/mysql
      - ./sql:/docker-entrypoint-initdb.d:ro

volumes:
  db-data:

Les mots de passe ne sont pas écrits dans le fichier : Docker Compose lit ${DB_PASSWORD} et ${DB_ROOT_PASSWORD} dans un fichier .env placé à côté, que tu n'ajoutes jamais au dépôt Git (chapitre 15). Au premier démarrage, MySQL exécute les scripts .sql du dossier sql/ : c'est là que tu ranges le script de création de ta base. Lance le tout avec docker compose up -d et ouvre http://localhost:8080. Le cours Docker explique les images, les volumes et Compose en détail.

L'éditeur

Visual Studio Code avec l'extension PHP Intelephense (complétion, détection des erreurs de type) suffit largement. PhpStorm, l'IDE de JetBrains, est gratuit pour les étudiants avec une licence éducation.

Ton premier script PHP

Crée le dossier public dans ton projet, puis le fichier public/index.php :

php
<?php

declare(strict_types=1);

$prenom = 'Chloé';
$heure = (int) date('G');
$salutation = $heure < 18 ? 'Bonjour' : 'Bonsoir';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Prêtmat</title>
</head>
<body>
  <h1><?= $salutation ?>, <?= htmlspecialchars($prenom) ?> !</h1>
  <p>Nous sommes le <?= date('d/m/Y') ?>.</p>
</body>
</html>

Lance php -S localhost:8000 -t public et ouvre http://localhost:8000 : la page affiche « Bonjour, Chloé ! » (ou « Bonsoir » après 18 h) et la date du jour. Affiche le code source de la page dans le navigateur : il ne contient que du HTML.

Décortiquons :

  • <?php ouvre un bloc de code PHP ; ?> le ferme et repasse en HTML. Tout ce qui est hors des balises est envoyé tel quel.
  • <?= expression ?> est un raccourci de <?php echo expression; ?> : il affiche une valeur dans le HTML.
  • declare(strict_types=1); active le typage strict (chapitre 2). Il se place en toute première instruction du fichier.
  • Chaque instruction se termine par un point-virgule.
  • htmlspecialchars() protège l'affichage d'une donnée : prends l'habitude dès maintenant, le chapitre 5 explique pourquoi.

Configurer PHP pour développer

Le comportement de PHP se règle dans le fichier php.ini (la commande php --ini te dit lequel est utilisé). En développement, tu veux voir toutes les erreurs ; en production, tu veux ne jamais les montrer au visiteur, mais les écrire dans un journal (chapitre 15).

DirectiveDéveloppementProductionRôle
error_reportingE_ALLE_ALLQuelles erreurs PHP signale : toutes, dans les deux cas
display_errorsOnOffAfficher les erreurs dans la page
log_errorsOnOnÉcrire les erreurs dans un journal
error_log(au choix)/var/log/php/erreurs.logLe fichier du journal

PHP fournit deux modèles à copier : php.ini-development et php.ini-production. Le Dockerfile ci-dessus copie le premier.

Quand une erreur survient, lis le message en entier : il donne le type d'erreur, la cause et le fichier et le numéro de ligne.

text
PHP Warning:  Undefined variable $prenon in /var/www/html/public/index.php on line 14
PHP Fatal error:  Uncaught TypeError: number_format(): Argument #1 ($num) must be of type float, string given in /var/www/html/public/index.php:9

Le premier est un avertissement (warning) : le script continue, mais $prenon (faute de frappe) vaut null. Le second est une erreur fatale : le script s'arrête. Une erreur fatale qui commence par Uncaught est une exception non attrapée (chapitre 8).

Le fil rouge du cours : Prêtmat

Tous les exemples construisent la même application : Prêtmat, l'outil de prêt de matériel du service informatique de Sorbier Logistique, une PME de 14 salariés (l'entreprise de la base d'exemple du cours SQL). Le service prête des ordinateurs portables, des vidéoprojecteurs, des tablettes et des caméras aux salariés. Aujourd'hui, les prêts sont notés dans un tableur partagé, avec les problèmes que tu devines : qui a le vidéoprojecteur ? Depuis quand ?

L'application doit permettre :

  • aux employés de se connecter, de voir le matériel disponible et leurs emprunts en cours ;
  • au gestionnaire (Chloé Lambert, technicienne) d'ajouter, modifier et retirer du matériel avec sa photo, d'enregistrer un prêt et un retour ;
  • à une future application mobile de consulter le matériel disponible par une API JSON.

C'est exactement la taille d'une réalisation professionnelle présentable à l'E6 : trois tables, une authentification avec deux rôles, un CRUD complet, des règles de gestion (on ne prête pas un matériel déjà prêté ou en réparation) et une API.

Exercices

Exercice 1 sur 3 Ce que reçoit le navigateur Réussi À revoir

Voici le fichier public/stock.php :

php
<?php
$nbPortables = 4;
$nbPretes = 3;
?>
<p>Portables disponibles : <?= $nbPortables - $nbPretes ?></p>
<?php // Penser à ajouter les tablettes ?>
  1. Qu'affiche le navigateur ?
  2. Que voit un visiteur qui affiche le code source de la page ?
  3. Le commentaire « Penser à ajouter les tablettes » est-il visible par le visiteur ?
Voir la réponseMasquer la réponse de l'exercice 1
  1. « Portables disponibles : 1 ».
  2. Uniquement le HTML produit : <p>Portables disponibles : 1</p>, suivi d'un saut de ligne. Les variables et le calcul ne quittent pas le serveur.
  3. Non. C'est un commentaire PHP (dans un bloc <?php … ?>) : il n'est jamais envoyé. Un commentaire HTML (<!-- … -->), lui, serait visible dans le code source. Ne mets jamais d'information sensible dans un commentaire HTML.

Tu avais trouvé ?

Exercice 2 sur 3 Choisir son environnement Réussi À revoir

Pour chaque situation, propose l'environnement le plus adapté et justifie en une phrase.

  1. Tu as un PC Windows personnel et tu veux PHP, MySQL et phpMyAdmin en quelques clics.
  2. Ton équipe de trois développe Prêtmat : un étudiant est sous macOS, deux sous Windows, et le serveur de production tourne sous Debian avec PHP 8.5 et MySQL 8.4.
  3. Tu veux juste tester une fonction PHP de dix lignes.
Voir la réponseMasquer la réponse de l'exercice 2
  1. Laragon (ou XAMPP) : une seule installation fournit Apache, PHP, MySQL et phpMyAdmin. Laragon est gratuit pour un usage non commercial, ce qui est le cas d'un étudiant qui apprend.
  2. Docker Compose : le Dockerfile et le compose.yaml versionnés dans le dépôt donnent à chacun exactement les mêmes versions que la production, quel que soit son système. On évite le « ça marche sur ma machine ».
  3. PHP en ligne de commande : php test.php dans un terminal, ou php -a pour le mode interactif. Pas besoin de serveur web.

Tu avais trouvé ?

Exercice 3 sur 3 Lire un message d'erreur Réussi À revoir

Au premier lancement de Prêtmat avec Docker Compose, la page affiche :

text
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /var/www/html/src/bdd.php:12

La connexion est configurée avec l'hôte localhost. Quel fichier et quelle ligne regarder ? Quelle est la cause probable, et la correction ?

Voir la réponseMasquer la réponse de l'exercice 3

Le fichier src/bdd.php, ligne 12 : c'est là que la connexion PDO est créée. Avec l'hôte localhost, le pilote MySQL cherche une socket Unix locale, qui n'existe pas dans le conteneur PHP (d'où « No such file or directory ») : MySQL tourne dans un autre conteneur. Il faut utiliser le nom du service, db, comme hôte, ce que fait la variable d'environnement DB_HOST: db du compose.yaml. Sans Docker, avec un MySQL local, 127.0.0.1 force une connexion TCP et règle aussi ce message.

Note au passage que l'erreur s'affiche à l'écran : c'est normal en développement, inacceptable en production, où le message révèle des chemins et des noms de fichiers.

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Les bases de PHP : variables, types, conditions et bouclesRevoir le sommaire du cours