Formation DWWM - Les fonctions qu'on utilise TOUT le temps
2025 - 2026
Manipuler du texte
<?php
$nom = "Marie";
$longueur = strlen($nom); // 5
$password = "123456";
if (strlen($password) < 8) {
echo "Le mot de passe doit faire au moins 8 caractères";
}
// Vérifier qu'un champ n'est pas vide
$message = " ";
if (strlen(trim($message)) == 0) {
echo "Le message est vide";
}
// Compter avec espaces
$texte = "Bonjour tout le monde";
echo strlen($texte); // 21 (espaces comptés)
// ⚠️ Attention aux accents
$mot = "été";
echo strlen($mot); // 5 (pas 3) car UTF-8
echo mb_strlen($mot); // 3 (correct pour UTF-8)
?>
mb_strlen() pour les caractères accentués
<?php
$nom = " Marie ";
echo trim($nom); // "Marie"
// Utilisation typique avec formulaires
$email = trim($_POST['email'] ?? '');
// Variantes
$texte = " Bonjour ";
echo ltrim($texte); // "Bonjour " (gauche seulement)
echo rtrim($texte); // " Bonjour" (droite seulement)
echo trim($texte); // "Bonjour" (les deux)
// Enlever d'autres caractères
$url = "https://example.com/";
echo trim($url, '/'); // "https://example.com"
$phone = "---01-23-45-67-89---";
echo trim($phone, '-'); // "01-23-45-67-89"
// Combiné avec empty
$nom = " ";
if (empty(trim($nom))) {
echo "Le nom est vide ou contient que des espaces";
}
?>
<?php
$nom = "Marie DUPONT";
echo strtolower($nom); // "marie dupont"
echo strtoupper($nom); // "MARIE DUPONT"
// Comparaison insensible à la casse
$email1 = "Marie@Mail.com";
$email2 = "marie@mail.com";
if (strtolower($email1) === strtolower($email2)) {
echo "Emails identiques";
}
// ucfirst() = Première lettre en majuscule
$prenom = "marie";
echo ucfirst($prenom); // "Marie"
// ucwords() = Première lettre de chaque mot
$nom = "jean-paul sartre";
echo ucwords($nom); // "Jean-Paul Sartre"
// Pour les accents
$texte = "ÉTÉ";
echo strtolower($texte); // "ÉtÉ" (bugué)
echo mb_strtolower($texte); // "été" (correct)
?>
<?php
$texte = "Bonjour Marie, comment vas-tu Marie ?";
// Remplacer simple
echo str_replace("Marie", "Jean", $texte);
// "Bonjour Jean, comment vas-tu Jean ?"
// Remplacer plusieurs valeurs
$texte = "J'aime les chats et les chiens";
$recherche = ["chats", "chiens"];
$remplacement = ["dogs", "cats"];
echo str_replace($recherche, $remplacement, $texte);
// "J'aime les dogs et les cats"
// Compter les remplacements
$texte = "test test test";
$resultat = str_replace("test", "OK", $texte, $count);
echo "Remplacé $count fois"; // 3
// Supprimer du texte (remplacer par vide)
$phone = "01-23-45-67-89";
$phone = str_replace("-", "", $phone); // "0123456789"
// Sensible à la casse
echo str_replace("marie", "Jean", "Marie"); // "Marie" (pas de remplacement)
// Insensible à la casse
echo str_ireplace("marie", "Jean", "Marie"); // "Jean"
?>
<?php
$texte = "Bonjour tout le monde";
// Depuis le début
echo substr($texte, 0, 7); // "Bonjour"
// Depuis une position
echo substr($texte, 8, 4); // "tout"
// Depuis la fin (index négatif)
echo substr($texte, -5); // "monde"
// Jusqu'à la fin
echo substr($texte, 8); // "tout le monde"
// Cas pratiques
$email = "marie@example.com";
$username = substr($email, 0, strpos($email, '@')); // "marie"
$phone = "0123456789";
$indicatif = substr($phone, 0, 2); // "01"
// Tronquer un texte long
$description = "Un très long texte...";
if (strlen($description) > 50) {
$description = substr($description, 0, 47) . "...";
}
// Code promo (3 premiers caractères)
$code = "PROMO2024";
echo substr($code, 0, 3); // "PRO"
?>
<?php
$email = "marie@example.com";
// Trouver la position du @
$position = strpos($email, '@'); // 5
// Vérifier si contient
if (strpos($email, '@') !== false) {
echo "Email valide";
}
// ⚠️ PIÈGE : 0 vs false
$texte = "test";
if (strpos($texte, "t") !== false) { // ✅ BON
echo "Contient 't'";
}
if (strpos($texte, "t")) { // ❌ MAUVAIS (0 = false)
echo "Jamais affiché";
}
// Extraire le domaine d'un email
$email = "marie@example.com";
$positionAt = strpos($email, '@');
$domaine = substr($email, $positionAt + 1); // "example.com"
// Vérifier une extension
$fichier = "photo.jpg";
if (strpos($fichier, '.jpg') !== false) {
echo "C'est une image JPG";
}
// stripos() = insensible à la casse
echo strpos("Test", "t"); // false (pas trouvé)
echo stripos("Test", "t"); // 0 (trouvé)
?>
<?php
// EXPLODE : String → Array
$tags = "php,html,css,javascript";
$tableau = explode(",", $tags);
// ["php", "html", "css", "javascript"]
// Date
$date = "2024-12-30";
list($annee, $mois, $jour) = explode("-", $date);
echo "$jour/$mois/$annee"; // 30/12/2024
// Limiter le nombre de divisions
$texte = "un:deux:trois:quatre";
$parts = explode(":", $texte, 2);
// ["un", "deux:trois:quatre"]
// IMPLODE : Array → String
$prenoms = ["Marie", "Jean", "Sophie"];
echo implode(", ", $prenoms); // "Marie, Jean, Sophie"
// join() = alias de implode()
echo join(" - ", $prenoms); // "Marie - Jean - Sophie"
// Construire une requête SQL
$ids = [1, 5, 12, 23];
$sql = "SELECT * FROM users WHERE id IN (" . implode(",", $ids) . ")";
// SELECT * FROM users WHERE id IN (1,5,12,23)
// CSV → Array
$csv = "Marie,Dupont,25";
$data = explode(",", $csv);
?>
<?php
// str_repeat() - Répéter une chaîne
echo str_repeat("*", 10); // "**********"
$ligne = str_repeat("-", 50);
// str_pad() - Compléter une chaîne
$numero = "42";
echo str_pad($numero, 5, "0", STR_PAD_LEFT); // "00042"
// number_format() - Formater un nombre
$prix = 1234.56;
echo number_format($prix, 2, ',', ' '); // "1 234,56"
// wordwrap() - Couper le texte
$texte = "Un très long texte qui doit être coupé";
echo wordwrap($texte, 20, "\n");
// strip_tags() - Supprimer les balises HTML
$html = "<p>Bonjour <strong>Marie</strong></p>";
echo strip_tags($html); // "Bonjour Marie"
// nl2br() - Convertir \n en <br>
$texte = "Ligne 1\nLigne 2";
echo nl2br($texte); // "Ligne 1<br>Ligne 2"
// sprintf() - Formater une chaîne
$nom = "Marie";
$age = 25;
echo sprintf("Je m'appelle %s et j'ai %d ans", $nom, $age);
?>
Manipuler des arrays
<?php
$fruits = ["Pomme", "Banane", "Orange"];
echo count($fruits); // 3
// Vérifier si vide
if (count($panier) == 0) {
echo "Panier vide";
}
// Mieux : empty()
if (empty($panier)) {
echo "Panier vide";
}
// Tableau associatif
$utilisateur = [
'nom' => 'Dupont',
'prenom' => 'Marie',
'age' => 25
];
echo count($utilisateur); // 3
// Compter récursivement (tableaux imbriqués)
$data = [
'user1' => ['nom' => 'Dupont', 'age' => 25],
'user2' => ['nom' => 'Martin', 'age' => 30]
];
echo count($data); // 2
echo count($data, COUNT_RECURSIVE); // 6
// sizeof() = alias de count()
echo sizeof($fruits); // 3
?>
<?php
$fruits = ["Pomme", "Banane", "Orange"];
if (in_array("Banane", $fruits)) {
echo "Banane est dans le tableau";
}
// Validation de langue
$languesDisponibles = ['fr', 'en', 'es', 'de'];
$langue = $_GET['lang'] ?? 'fr';
if (!in_array($langue, $languesDisponibles)) {
$langue = 'fr'; // Défaut
}
// Vérification stricte (type + valeur)
$nombres = [1, 2, 3, "4"];
in_array(4, $nombres); // true (4 == "4")
in_array(4, $nombres, true); // false (4 !== "4")
// Vérifier plusieurs valeurs
$roles = ['admin', 'editor'];
if (in_array($userRole, $roles)) {
echo "Accès autorisé";
}
// Dans un tableau associatif (cherche les VALEURS)
$user = ['nom' => 'Dupont', 'age' => 25];
in_array('Dupont', $user); // true
in_array('nom', $user); // false (c'est une clé)
?>
<?php
$fruits = ["Pomme", "Banane"];
// Ajouter à la fin
array_push($fruits, "Orange");
// ["Pomme", "Banane", "Orange"]
// Ajouter plusieurs éléments
array_push($fruits, "Fraise", "Kiwi");
// Syntaxe courte (équivalent)
$fruits[] = "Orange"; // Plus simple !
// Retirer le dernier
$dernier = array_pop($fruits);
echo $dernier; // "Kiwi"
// $fruits = ["Pomme", "Banane", "Orange", "Fraise"]
// Utilisation pratique : historique
$historique = [];
array_push($historique, "Page 1");
array_push($historique, "Page 2");
array_push($historique, "Page 3");
// Revenir en arrière
$dernierePage = array_pop($historique);
// Panier d'achat
$panier = [];
$panier[] = ['id' => 1, 'nom' => 'Produit 1'];
$panier[] = ['id' => 2, 'nom' => 'Produit 2'];
?>
<?php
$fruits = ["Pomme", "Banane", "Orange"];
// Retirer le premier
$premier = array_shift($fruits);
echo $premier; // "Pomme"
// $fruits = ["Banane", "Orange"]
// Ajouter au début
array_unshift($fruits, "Fraise");
// $fruits = ["Fraise", "Banane", "Orange"]
// File d'attente (FIFO)
$queue = [];
array_push($queue, "Client 1");
array_push($queue, "Client 2");
array_push($queue, "Client 3");
// Servir le premier client
$client = array_shift($queue);
echo "Servir : $client"; // "Client 1"
// Pile (LIFO)
$stack = [];
array_push($stack, "A");
array_push($stack, "B");
array_push($stack, "C");
$dernier = array_pop($stack); // "C"
?>
<?php
$fruits1 = ["Pomme", "Banane"];
$fruits2 = ["Orange", "Fraise"];
$tous = array_merge($fruits1, $fruits2);
// ["Pomme", "Banane", "Orange", "Fraise"]
// Tableaux associatifs
$user1 = ['nom' => 'Dupont', 'age' => 25];
$user2 = ['ville' => 'Paris', 'pays' => 'France'];
$user = array_merge($user1, $user2);
// ['nom' => 'Dupont', 'age' => 25, 'ville' => 'Paris', 'pays' => 'France']
// Écraser des valeurs
$defaults = ['lang' => 'fr', 'theme' => 'light'];
$userPrefs = ['theme' => 'dark'];
$config = array_merge($defaults, $userPrefs);
// ['lang' => 'fr', 'theme' => 'dark']
// Plusieurs tableaux
$a = [1, 2];
$b = [3, 4];
$c = [5, 6];
$all = array_merge($a, $b, $c); // [1,2,3,4,5,6]
// ⚠️ Avec opérateur +
$a = ['a' => 1, 'b' => 2];
$b = ['b' => 3, 'c' => 4];
array_merge($a, $b); // ['a'=>1, 'b'=>3, 'c'=>4] (b écrasé)
$a + $b; // ['a'=>1, 'b'=>2, 'c'=>4] (b gardé)
?>
<?php
$user = [
'nom' => 'Dupont',
'prenom' => 'Marie',
'age' => 25
];
// Récupérer les clés
$cles = array_keys($user);
// ['nom', 'prenom', 'age']
// Récupérer les valeurs
$valeurs = array_values($user);
// ['Dupont', 'Marie', 25]
// Vérifier si une clé existe
if (in_array('email', array_keys($user))) {
echo "Email existe";
}
// Mieux : array_key_exists()
if (array_key_exists('email', $user)) {
echo "Email existe";
}
// Obtenir la clé d'une valeur
$fruits = ['a' => 'Pomme', 'b' => 'Banane', 'c' => 'Orange'];
$cle = array_search('Banane', $fruits); // 'b'
// Réindexer un tableau
$tableau = [5 => 'a', 10 => 'b', 15 => 'c'];
$reindexe = array_values($tableau);
// [0 => 'a', 1 => 'b', 2 => 'c']
?>
<?php
// FILTER : Garder seulement certains éléments
$nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// Garder les pairs
$pairs = array_filter($nombres, function($n) {
return $n % 2 == 0;
});
// [2, 4, 6, 8, 10]
// Supprimer les valeurs vides
$data = ["", "test", null, "ok", 0, false];
$propre = array_filter($data);
// ["test", "ok"]
// MAP : Transformer chaque élément
$nombres = [1, 2, 3, 4, 5];
// Multiplier par 2
$doubles = array_map(function($n) {
return $n * 2;
}, $nombres);
// [2, 4, 6, 8, 10]
// Mettre en majuscules
$prenoms = ["marie", "jean", "sophie"];
$majuscules = array_map('strtoupper', $prenoms);
// ["MARIE", "JEAN", "SOPHIE"]
// Ajouter TVA
$prix = [100, 200, 300];
$avecTVA = array_map(function($p) {
return $p * 1.20;
}, $prix);
// [120, 240, 360]
?>
<?php
$nombres = [5, 2, 8, 1, 9];
// sort() - Tri croissant (réindexe)
sort($nombres);
// [1, 2, 5, 8, 9]
// rsort() - Tri décroissant (réindexe)
rsort($nombres);
// [9, 8, 5, 2, 1]
// asort() - Tri croissant (garde les clés)
$notes = ['Marie' => 15, 'Jean' => 12, 'Sophie' => 18];
asort($notes);
// ['Jean' => 12, 'Marie' => 15, 'Sophie' => 18]
// arsort() - Tri décroissant (garde les clés)
arsort($notes);
// ['Sophie' => 18, 'Marie' => 15, 'Jean' => 12]
// ksort() - Tri par clés croissant
ksort($notes);
// ['Jean' => 12, 'Marie' => 15, 'Sophie' => 18]
// krsort() - Tri par clés décroissant
krsort($notes);
// ['Sophie' => 18, 'Marie' => 15, 'Jean' => 12]
// usort() - Tri personnalisé
$produits = [
['nom' => 'B', 'prix' => 100],
['nom' => 'A', 'prix' => 200],
['nom' => 'C', 'prix' => 50]
];
usort($produits, function($a, $b) {
return $a['prix'] - $b['prix'];
});
// Trié par prix croissant
?>
Valider les données
<?php
// isset() - Variable existe et != NULL
$nom = "Marie";
isset($nom); // true
isset($inconnu); // false
$test = NULL;
isset($test); // false
// empty() - Variable "vide"
empty(""); // true
empty(0); // true
empty("0"); // true
empty(false); // true
empty(null); // true
empty([]); // true
empty("texte"); // false
// is_null() - Variable = NULL
$x = NULL;
is_null($x); // true
is_null($nom); // false
// Cas pratiques
// Vérifier $_GET
$id = $_GET['id'] ?? null;
if (isset($_GET['id'])) {
// existe
}
// Vérifier formulaire
if (isset($_POST['submit'])) {
$email = $_POST['email'] ?? '';
if (empty($email)) {
$erreur = "Email obligatoire";
}
}
?>
<?php
// is_numeric() - Est un nombre (ou string numérique)
is_numeric(42); // true
is_numeric("42"); // true
is_numeric("42.5"); // true
is_numeric("abc"); // false
// is_int() - Est un entier (type strict)
is_int(42); // true
is_int("42"); // false (string)
is_int(42.5); // false (float)
// is_float() / is_double()
is_float(42.5); // true
is_float(42); // false
// is_string()
is_string("test"); // true
is_string(123); // false
// is_bool()
is_bool(true); // true
is_bool(1); // false
// is_array()
is_array([1, 2, 3]); // true
is_array("test"); // false
// is_object()
$user = new stdClass();
is_object($user); // true
// Validation pratique
$age = $_POST['age'] ?? '';
if (!is_numeric($age)) {
$erreur = "L'âge doit être un nombre";
} elseif ($age < 0 || $age > 120) {
$erreur = "Âge invalide";
}
?>
<?php
// Valider un email
$email = "marie@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email valide";
}
// Valider une URL
$url = "https://www.example.com";
if (filter_var($url, FILTER_VALIDATE_URL)) {
echo "URL valide";
}
// Valider un entier
$age = "25";
if (filter_var($age, FILTER_VALIDATE_INT)) {
echo "Entier valide";
}
// Valider avec options
$age = "25";
$options = [
'options' => [
'min_range' => 18,
'max_range' => 100
]
];
if (filter_var($age, FILTER_VALIDATE_INT, $options)) {
echo "Âge valide (18-100)";
}
// Valider une IP
$ip = "192.168.1.1";
if (filter_var($ip, FILTER_VALIDATE_IP)) {
echo "IP valide";
}
// Nettoyer (filtrer)
$email = " Marie@Example.COM ";
$clean = filter_var($email, FILTER_SANITIZE_EMAIL);
// "Marie@Example.COM"
// Valider un booléen
filter_var("yes", FILTER_VALIDATE_BOOLEAN); // true
filter_var("no", FILTER_VALIDATE_BOOLEAN); // false
filter_var("1", FILTER_VALIDATE_BOOLEAN); // true
?>
Gérer le temps
<?php
// Date actuelle
echo date('Y-m-d'); // 2024-12-30
echo date('d/m/Y'); // 30/12/2024
echo date('d/m/Y H:i:s'); // 30/12/2024 15:30:45
// Formats courants
echo date('Y'); // 2024 (année sur 4 chiffres)
echo date('y'); // 24 (année sur 2 chiffres)
echo date('m'); // 12 (mois avec 0)
echo date('n'); // 12 (mois sans 0)
echo date('d'); // 30 (jour avec 0)
echo date('j'); // 30 (jour sans 0)
echo date('H'); // 15 (heure 24h)
echo date('h'); // 03 (heure 12h)
echo date('i'); // 30 (minutes)
echo date('s'); // 45 (secondes)
// Jour de la semaine
echo date('l'); // Monday
echo date('D'); // Mon
echo date('w'); // 1 (0=dimanche, 6=samedi)
echo date('N'); // 1 (1=lundi, 7=dimanche)
// Mois
echo date('F'); // December
echo date('M'); // Dec
// Footer copyright
echo "© " . date('Y') . " Mon Site";
// Nom de fichier avec date
$filename = "backup_" . date('Y-m-d_H-i-s') . ".sql";
// backup_2024-12-30_15-30-45.sql
?>
<?php
// Timestamp actuel
$maintenant = time(); // 1735567845
// Cookie qui expire dans 30 jours
setcookie('nom', 'valeur', time() + (86400 * 30));
// Calculer des durées
$hier = time() - 86400; // -1 jour
$demain = time() + 86400; // +1 jour
$dansSemaineuneSemaine = time() + (86400 * 7); // +7 jours
// strtotime() - Parser une date
echo strtotime("2024-12-30"); // Timestamp
echo strtotime("next Monday"); // Timestamp
echo strtotime("+1 week"); // Dans 1 semaine
echo strtotime("+2 months"); // Dans 2 mois
echo strtotime("last day of next month"); // Dernier jour du mois prochain
// Calculer un âge
$dateNaissance = "1998-05-15";
$age = floor((time() - strtotime($dateNaissance)) / 31536000);
// Vérifier si une date est dans le futur
$dateEvent = strtotime("2025-06-15");
if ($dateEvent > time()) {
echo "L'événement est dans le futur";
}
// Différence entre deux dates
$date1 = strtotime("2024-01-01");
$date2 = strtotime("2024-12-30");
$jours = ($date2 - $date1) / 86400; // Nombre de jours
?>
<?php
// Créer une date
$date = new DateTime(); // Maintenant
$date = new DateTime('2024-12-30'); // Date spécifique
$date = new DateTime('2024-12-30 15:30:00');
// Formater
echo $date->format('d/m/Y'); // 30/12/2024
echo $date->format('Y-m-d H:i:s'); // 2024-12-30 15:30:00
// Modifier
$date->modify('+1 day'); // Ajouter 1 jour
$date->modify('-2 weeks'); // Retirer 2 semaines
$date->modify('+3 months'); // Ajouter 3 mois
// DateInterval
$date = new DateTime('2024-12-30');
$date->add(new DateInterval('P1D')); // +1 jour
$date->sub(new DateInterval('P2M')); // -2 mois
// Différence entre deux dates
$date1 = new DateTime('2024-01-01');
$date2 = new DateTime('2024-12-30');
$diff = $date1->diff($date2);
echo $diff->days; // 364 jours
echo $diff->m; // 11 mois
echo $diff->format('%d jours'); // 364 jours
// Comparer des dates
$date1 = new DateTime('2024-01-01');
$date2 = new DateTime('2024-12-30');
if ($date1 < $date2) {
echo "date1 est avant date2";
}
// Timestamp
echo $date->getTimestamp();
?>
Calculs et nombres
<?php
// round() - Arrondi classique
echo round(4.4); // 4
echo round(4.5); // 5
echo round(4.6); // 5
// Précision
echo round(3.14159, 2); // 3.14
echo round(1234.56, -2); // 1200
// ceil() - Arrondi supérieur
echo ceil(4.1); // 5
echo ceil(4.9); // 5
echo ceil(-4.1); // -4
// floor() - Arrondi inférieur
echo floor(4.1); // 4
echo floor(4.9); // 4
echo floor(-4.1); // -5
// Cas pratiques
// Pagination
$totalArticles = 47;
$parPage = 10;
$nbPages = ceil($totalArticles / $parPage); // 5 pages
// Prix arrondi
$prix = 19.99;
$prixArrondi = round($prix); // 20
// Pourcentage
$note = 15.7;
$pourcentage = round(($note / 20) * 100); // 79%
// TVA
$ht = 100;
$ttc = round($ht * 1.20, 2); // 120.00
?>
<?php
// rand() - Nombre aléatoire
echo rand(); // Nombre quelconque
echo rand(1, 10); // Entre 1 et 10
echo rand(0, 100); // Entre 0 et 100
// mt_rand() - Plus rapide et meilleur
echo mt_rand(1, 100); // Recommandé
// random_int() - Cryptographiquement sûr (PHP 7+)
echo random_int(1, 100);
// Cas pratiques
// Dé à 6 faces
$de = rand(1, 6);
// Pile ou face
$pieceouface = rand(0, 1) ? "Pile" : "Face";
// Couleur aléatoire
$r = rand(0, 255);
$g = rand(0, 255);
$b = rand(0, 255);
$color = "rgb($r, $g, $b)";
// Choisir un élément aléatoire
$fruits = ["Pomme", "Banane", "Orange", "Fraise"];
$index = rand(0, count($fruits) - 1);
$fruitAleatoire = $fruits[$index];
// Mieux : array_rand()
$index = array_rand($fruits);
$fruitAleatoire = $fruits[$index];
// Token aléatoire
$token = bin2hex(random_bytes(32));
// Code promo
$code = "PROMO" . rand(1000, 9999); // PROMO5847
?>
<?php
// min() - Minimum
echo min(5, 3, 8, 1); // 1
echo min([5, 3, 8, 1]); // 1
$a = 10;
$b = 5;
echo min($a, $b); // 5
// max() - Maximum
echo max(5, 3, 8, 1); // 8
echo max([5, 3, 8, 1]); // 8
// abs() - Valeur absolue
echo abs(-5); // 5
echo abs(5); // 5
echo abs(-3.14); // 3.14
// Cas pratiques
// Limiter une valeur
$age = $_GET['age'] ?? 0;
$age = max(0, min(120, $age)); // Entre 0 et 120
// Différence (toujours positive)
$diff = abs($nombre1 - $nombre2);
// Trouver le prix le plus bas
$prix = [99, 149, 79, 199];
$moinsCher = min($prix); // 79
// Note la plus haute
$notes = [12, 15, 8, 18, 14];
$meilleure = max($notes); // 18
// Température (écart)
$temp1 = 20;
$temp2 = -5;
$ecart = abs($temp1 - $temp2); // 25
?>
<?php
// pow() - Puissance
echo pow(2, 3); // 8 (2³)
echo pow(10, 2); // 100 (10²)
// Opérateur ** (PHP 5.6+)
echo 2 ** 3; // 8
// sqrt() - Racine carrée
echo sqrt(16); // 4
echo sqrt(9); // 3
// Pythagore (hypoténuse)
$a = 3;
$b = 4;
$c = sqrt(pow($a, 2) + pow($b, 2)); // 5
// exp() - Exponentielle (e^x)
echo exp(1); // 2.718... (e)
echo exp(2); // 7.389...
// log() - Logarithme
echo log(10); // 2.302... (ln)
echo log10(100); // 2 (log base 10)
// Intérêts composés
$capital = 1000;
$taux = 0.05; // 5%
$annees = 10;
$valeurFuture = $capital * pow(1 + $taux, $annees);
echo round($valeurFuture, 2); // 1628.89
?>
Protéger les données
<?php
// Échapper pour affichage HTML
$nom = "<script>alert('XSS')</script>";
echo htmlspecialchars($nom);
// Affiche : <script>alert('XSS')</script>
// Syntaxe recommandée
$nom = $_POST['nom'] ?? '';
echo htmlspecialchars($nom, ENT_QUOTES, 'UTF-8');
// Fonction raccourcie
function e($text) {
return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}
echo e($nom); // Plus court !
// Dans les attributs HTML
$classe = $_GET['class'] ?? '';
?>
<div class="<?= e($classe) ?>">Contenu</div>
<?php
// Dans les valeurs de formulaire
$email = $_POST['email'] ?? '';
?>
<input type="text" value="<?= e($email) ?>">
<?php
// Tableau
$user = [
'nom' => '<script>alert("XSS")</script>',
'email' => 'test@mail.com'
];
?>
<p>Nom : <?= e($user['nom']) ?></p>
<?php
// INSCRIPTION : Hasher le mot de passe
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
// $2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
// Sauvegarder $hash en BDD (pas le password !)
// CONNEXION : Vérifier le mot de passe
$passwordSaisi = $_POST['password'];
$hashEnBDD = "..."; // Récupéré de la BDD
if (password_verify($passwordSaisi, $hashEnBDD)) {
echo "Mot de passe correct";
} else {
echo "Mot de passe incorrect";
}
// Exemple complet inscription
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = $_POST['email'];
$password = $_POST['password'];
// Validation
if (strlen($password) < 8) {
$erreur = "8 caractères minimum";
} else {
// Hasher
$hash = password_hash($password, PASSWORD_DEFAULT);
// Sauvegarder en BDD
$stmt = $pdo->prepare("INSERT INTO users (email, password) VALUES (?, ?)");
$stmt->execute([$email, $hash]);
}
}
// ❌ NE JAMAIS FAIRE
// - Stocker les mots de passe en clair
// - Utiliser MD5 ou SHA1
// - Créer son propre algorithme
?>
<?php
// hash() - Créer un hash
$texte = "Mon texte secret";
echo hash('sha256', $texte);
echo hash('md5', $texte); // ❌ Pas sécurisé
echo hash('sha512', $texte);
// Cas pratiques
// Token de vérification email
$token = bin2hex(random_bytes(32));
$tokenHash = hash('sha256', $token);
// Sauvegarder $tokenHash en BDD
// Vérifier le token
$tokenSaisi = $_GET['token'];
$tokenHashBDD = "...";
if (hash('sha256', $tokenSaisi) === $tokenHashBDD) {
echo "Token valide";
}
// hash_equals() - Comparaison sécurisée (timing attack safe)
if (hash_equals($hash1, $hash2)) {
echo "Identiques";
}
// Générer un identifiant unique
$uniqueId = hash('sha256', uniqid() . time() . rand());
// Checksum de fichier
$checksum = hash_file('sha256', 'fichier.zip');
// HMAC (avec clé secrète)
$cle = "ma_cle_secrete";
$message = "données importantes";
$hmac = hash_hmac('sha256', $message, $cle);
?>
Lire et écrire des fichiers
<?php
// file_exists() - Fichier ou dossier existe
if (file_exists('config.php')) {
echo "Le fichier existe";
}
// is_file() - C'est un fichier
if (is_file('config.php')) {
echo "C'est un fichier";
}
// is_dir() - C'est un dossier
if (is_dir('images')) {
echo "C'est un dossier";
}
// Vérifier avant inclusion
$fichier = 'includes/header.php';
if (file_exists($fichier)) {
require $fichier;
} else {
die("Fichier introuvable");
}
// Vérifier une image uploadée
$upload = $_FILES['photo']['tmp_name'];
if (file_exists($upload) && is_file($upload)) {
// Traiter l'upload
}
// Créer un dossier s'il n'existe pas
if (!is_dir('uploads')) {
mkdir('uploads', 0755, true);
}
// Taille du fichier
if (file_exists('image.jpg')) {
$taille = filesize('image.jpg'); // En octets
$tailleKo = round($taille / 1024, 2);
echo "$tailleKo Ko";
}
?>
<?php
// LIRE un fichier complet
$contenu = file_get_contents('fichier.txt');
echo $contenu;
// Lire une URL
$html = file_get_contents('https://example.com');
// Lire un JSON
$json = file_get_contents('data.json');
$data = json_decode($json, true);
// ÉCRIRE dans un fichier (écrase)
file_put_contents('log.txt', 'Nouvelle entrée');
// AJOUTER à la fin (mode append)
file_put_contents('log.txt', 'Entrée 2', FILE_APPEND);
// Écrire un tableau en JSON
$users = [
['nom' => 'Dupont', 'age' => 25],
['nom' => 'Martin', 'age' => 30]
];
file_put_contents('users.json', json_encode($users));
// Log simple
$message = date('Y-m-d H:i:s') . " - Connexion utilisateur\n";
file_put_contents('logs.txt', $message, FILE_APPEND);
// Compteur de visites
$compteur = (int)file_get_contents('compteur.txt');
$compteur++;
file_put_contents('compteur.txt', $compteur);
// Cache
$cache = 'cache/page.html';
if (file_exists($cache)) {
echo file_get_contents($cache);
} else {
$html = genererPage();
file_put_contents($cache, $html);
echo $html;
}
?>
<?php
// LIRE un fichier
$handle = fopen('fichier.txt', 'r');
if ($handle) {
while (($ligne = fgets($handle)) !== false) {
echo $ligne;
}
fclose($handle);
}
// ÉCRIRE dans un fichier
$handle = fopen('log.txt', 'w'); // 'w' = écrase
fwrite($handle, "Ligne 1\n");
fwrite($handle, "Ligne 2\n");
fclose($handle);
// AJOUTER à la fin
$handle = fopen('log.txt', 'a'); // 'a' = append
fwrite($handle, "Ligne 3\n");
fclose($handle);
// Modes d'ouverture
// 'r' = Lecture seule
// 'w' = Écriture (écrase)
// 'a' = Écriture (ajoute à la fin)
// 'r+' = Lecture + Écriture
// 'w+' = Lecture + Écriture (écrase)
// 'a+' = Lecture + Écriture (ajoute)
// Lire ligne par ligne
$handle = fopen('data.csv', 'r');
while (($ligne = fgets($handle)) !== false) {
$colonnes = explode(',', trim($ligne));
// Traiter chaque ligne
}
fclose($handle);
// Vérifier si le fichier s'est ouvert
$handle = fopen('fichier.txt', 'r');
if (!$handle) {
die("Impossible d'ouvrir le fichier");
}
?>
<?php
// unlink() - Supprimer un fichier
if (file_exists('temp.txt')) {
unlink('temp.txt');
echo "Fichier supprimé";
}
// rename() - Renommer ou déplacer
rename('ancien.txt', 'nouveau.txt');
rename('dossier1/fichier.txt', 'dossier2/fichier.txt');
// copy() - Copier un fichier
copy('original.txt', 'copie.txt');
// Cas pratiques
// Supprimer une image uploadée
$image = 'uploads/photo123.jpg';
if (file_exists($image)) {
unlink($image);
}
// Créer une sauvegarde
$fichier = 'data.json';
$backup = 'backup_' . date('Y-m-d') . '.json';
copy($fichier, $backup);
// Renommer avec timestamp
$old = 'log.txt';
$new = 'log_' . time() . '.txt';
rename($old, $new);
// Nettoyer les fichiers temporaires
$dossier = 'temp/';
$fichiers = scandir($dossier);
foreach ($fichiers as $fichier) {
if ($fichier != '.' && $fichier != '..') {
unlink($dossier . $fichier);
}
}
// mkdir() - Créer un dossier
mkdir('nouveau_dossier');
mkdir('dossier/sous/dossier', 0755, true); // Récursif
// rmdir() - Supprimer un dossier vide
rmdir('ancien_dossier');
?>
Déboguer son code
<?php
$nom = "Marie";
$age = 25;
$actif = true;
$fruits = ["Pomme", "Banane", "Orange"];
$user = ['nom' => 'Dupont', 'age' => 25];
// var_dump() - Détails complets (type + valeur)
var_dump($nom);
// string(5) "Marie"
var_dump($age);
// int(25)
var_dump($actif);
// bool(true)
var_dump($fruits);
// array(3) {
// [0]=> string(5) "Pomme"
// [1]=> string(6) "Banane"
// [2]=> string(6) "Orange"
// }
// print_r() - Plus lisible (pas de types)
print_r($fruits);
// Array
// (
// [0] => Pomme
// [1] => Banane
// [2] => Orange
// )
// Capturer dans une variable
$debug = print_r($fruits, true);
// Afficher proprement en HTML
echo '<pre>';
print_r($user);
echo '</pre>';
// Debug en production (logs)
error_log(print_r($_POST, true));
?>
<?php
// die() - Arrête et affiche un message
if (!file_exists('config.php')) {
die("Erreur : Fichier de configuration manquant");
}
// exit() - Identique à die()
if (!$connexionBDD) {
exit("Erreur de connexion à la base de données");
}
// Sans message
if ($erreur) {
die(); // Arrête sans rien afficher
}
// Avec code de sortie (pour CLI)
exit(0); // Succès
exit(1); // Erreur
// Debug rapide
var_dump($_POST);
die(); // Arrête ici
// Vérifier l'authentification
session_start();
if (!isset($_SESSION['user_id'])) {
die("Accès refusé. <a href='login.php'>Connexion</a>");
}
// Redirection + stop
header('Location: index.php');
exit; // Important après header()
// Debug avec informations
die("DEBUG - Valeur de \$id : $id");
// En production, logger au lieu de die()
if ($erreur) {
error_log("Erreur critique : " . $erreur);
die("Une erreur est survenue");
}
?>
<?php
// Afficher TOUTES les erreurs (développement)
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Masquer les erreurs (production)
error_reporting(0);
ini_set('display_errors', 0);
// Recommandé en production
error_reporting(E_ALL);
ini_set('display_errors', 0); // Masquer
ini_set('log_errors', 1); // Logger
ini_set('error_log', '/path/to/error.log');
// Configuration selon l'environnement
$dev = true; // false en production
if ($dev) {
error_reporting(E_ALL);
ini_set('display_errors', 1);
} else {
error_reporting(0);
ini_set('display_errors', 0);
}
// Logger des erreurs custom
error_log("Message d'erreur personnalisé");
// Logger avec contexte
$erreur = "Connexion BDD échouée";
error_log($erreur . " - User: " . $_SESSION['user_id']);
// Fonctions utiles
ini_get('display_errors'); // Lire une config
ini_set('memory_limit', '256M'); // Modifier la mémoire
set_time_limit(300); // Temps d'exécution max (5 min)
?>
Le reste de l'essentiel
<?php
// ⚠️ Doit être appelé AVANT tout HTML
// REDIRECTION
header('Location: index.php');
exit; // Toujours exit après !
header('Location: https://www.google.com');
exit;
// CONTENT-TYPE
header('Content-Type: application/json');
echo json_encode(['status' => 'success']);
header('Content-Type: text/plain');
echo "Texte brut";
header('Content-Type: image/png');
readfile('image.png');
// TÉLÉCHARGEMENT
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="document.pdf"');
readfile('document.pdf');
// CACHE
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
// CODE HTTP
http_response_code(404);
header("HTTP/1.0 404 Not Found");
http_response_code(500);
// Empêcher le cache
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
?>
<?php
// Array → JSON
$data = [
'nom' => 'Dupont',
'age' => 25,
'actif' => true
];
$json = json_encode($data);
// {"nom":"Dupont","age":25,"actif":true}
// Options de formatage
$json = json_encode($data, JSON_PRETTY_PRINT);
// {
// "nom": "Dupont",
// "age": 25,
// "actif": true
// }
// JSON → Array
$json = '{"nom":"Dupont","age":25}';
$data = json_decode($json, true); // true = array
// ['nom' => 'Dupont', 'age' => 25]
// JSON → Objet
$data = json_decode($json); // false = objet
// stdClass {nom: "Dupont", age: 25}
echo $data->nom; // "Dupont"
// API Response
header('Content-Type: application/json');
echo json_encode([
'status' => 'success',
'data' => $users,
'count' => count($users)
]);
// Sauvegarder en JSON
$users = [/* ... */];
file_put_contents('users.json', json_encode($users, JSON_PRETTY_PRINT));
// Charger depuis JSON
$json = file_get_contents('users.json');
$users = json_decode($json, true);
// Vérifier les erreurs
json_decode($json);
if (json_last_error() !== JSON_ERROR_NONE) {
die("JSON invalide : " . json_last_error_msg());
}
?>
<?php
// Démarrer une session
session_start();
// Stocker des données
$_SESSION['user_id'] = 42;
$_SESSION['username'] = "marie";
// Lire des données
$userId = $_SESSION['user_id'] ?? null;
// Vérifier si connecté
if (isset($_SESSION['user_id'])) {
echo "Connecté";
}
// Supprimer une variable
unset($_SESSION['temp']);
// Détruire la session complète
session_destroy();
// Déconnexion complète
$_SESSION = [];
session_destroy();
setcookie('PHPSESSID', '', time()-3600, '/');
// Régénérer l'ID de session (sécurité)
session_regenerate_id(true);
// Vérifier si session active
if (session_status() === PHP_SESSION_ACTIVE) {
echo "Session active";
}
?>
<?php
// uniqid() - ID unique basé sur le temps
$id = uniqid(); // 6761e4f3a5c89
// Plus unique (avec préfixe)
$id = uniqid('user_'); // user_6761e4f3a5c89
// Encore plus unique
$id = uniqid('', true); // 6761e4f3a5c89.12345678
// Cas pratiques
// Nom de fichier unique
$extension = 'jpg';
$filename = uniqid('img_') . '.' . $extension;
// img_6761e4f3a5c89.jpg
// Token de vérification
$token = uniqid() . bin2hex(random_bytes(16));
// Session ID personnalisé
$sessionId = md5(uniqid() . time() . rand());
// md5() - Hash MD5 (128 bits)
echo md5('password'); // 5f4dcc3b5aa765d61d8327deb882cf99
// ⚠️ MD5 n'est PAS sécurisé pour les mots de passe !
// Utilisez password_hash() à la place
// sha1() - Hash SHA1 (160 bits)
echo sha1('password'); // 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
// ⚠️ SHA1 non plus n'est pas sécurisé
// Utilisation acceptable de md5 : checksums, ETags
$checksum = md5_file('fichier.zip');
$etag = md5($content);
?>
<?php
// sleep() - Pause en secondes
sleep(5); // Pause de 5 secondes
// usleep() - Pause en microsecondes
usleep(500000); // Pause de 0.5 secondes
// Cas pratiques
// Anti-bruteforce (ralentir les tentatives)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = $_POST['email'];
$password = $_POST['password'];
// Vérifier...
// Ralentir les tentatives (2 secondes)
sleep(2);
if (!$valide) {
$erreur = "Identifiants incorrects";
}
}
// Simuler un traitement long
echo "Traitement en cours";
sleep(3);
echo "Terminé";
// Polling (vérifier régulièrement)
while (true) {
$status = checkStatus();
if ($status === 'complete') {
break;
}
sleep(5); // Vérifier toutes les 5 secondes
}
// time_sleep_until() - Dormir jusqu'à un timestamp
$wakeup = time() + 60; // Dans 1 minute
time_sleep_until($wakeup);
?>
🔧 Ces fonctions = 90% de votre code PHP !