680 likes | 848 Views
Le langage PHP 5. Sommaire. Qu’est-ce que PHP ? Les structures de base Traitements de base Traitements de chaînes Utilisation des tableaux Fonctions usuelles Formulaires et superglobales Environnement web et superglobales Les cookies et Les sessions Gestion des objets
E N D
Sommaire • Qu’est-ce que PHP ? • Les structures de base • Traitements de base • Traitements de chaînes • Utilisation des tableaux • Fonctions usuelles • Formulaires et superglobales • Environnement web et superglobales • Les cookies et Les sessions • Gestion des objets • Gestion de fichiers • Gestion des flux et Flux de sortie PHP • Envoyer et recevoir des e-mails • Travailler avec une base de données
Sommaire • Erreurs et exceptions • XML : concepts et SimpleXML • XML avancé • Les services web • Les templates • Les systèmes de cache • Gestion des images • Expressions régulières • Sécurité • Outils de développement PHP • Les CMS • Les frameworks
Fonctions usuelles Quelques fonctions très utiles • print_r (variable) : L’affichage de tableaux ou d’objets • var_dump() : L’affichage de tableaux ou d’objets • mt_rand([minimum,maximum]) : générateur de nombres aléatoires « Mersenne Twister »
Fonctions usuelles Informations de configuration • PHP peut communiquer tout ce qu’il sait sur sa configuration grâce à la célèbre fonction phpinfo(). En mettant simplement un appel à cette fonction dans un script, PHP renvoie une page HTML avec des informations sur le système, les options qui ont servi pendant la compilation, les extensions activées, les variables d’environnement, les entêtes HTTP et les informations de configuration.
Fonctions usuelles Informations de configuration
Fonctions usuelles Informations de configuration • Les options de la fonction phpinfo() :
Fonctions usuelles Informations de configuration <?php // Affiche toutes les informations phpinfo(); // Affiche uniquement le module d'information phpinfo(INFO_MODULES); // phpinfo(10) fournirait les informations correspondant // au module 8 et au module 2 (addition des valeurs). ?>
Fonctions usuelles Coloration syntaxique de code • Vous avez peut être remarqué sur certains sites traitant de PHP que le code donné dans les tutoriaux est coloré. Cette coloration n’est généralement pas faite à la main. PHP propose par défaut une fonction, highlight_string(), qui permet de colorer un code PHP et de l’envoyer à l’affichage. • Il est aussi possible d’afficher directement le contenu d’un fichier de cette façon. Il vous suffit pour cela de faire appel à highlight_file()
Fonctions usuelles Connaître les extrémités • La fonction max() retourne la plus grande valeur numérique parmi les valeurs passées en paramètres. • La fonction min() est l’opposée de max(). Elle retourne la valeur la plus petite. <?php echo max(1, 3, 5, 6, 7); // 7 echo max(array(2, 4, 5)); // 5 $val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7) ?>
Fonctions usuelles Arrondir des valeurs • Trois fonctions permettent d’arrondir des nombres : round() renvoie l’entier le plus proche, floor() arrondit à l’entier immédiatement inférieur et ceil() retourne l’entier immédiatement supérieur. <?php echo round(3.4); // Affiche 3 echo round(3.5); // Affiche 4 echo round(3.6); // Affiche 4 echo round(3.6, 0); // Affiche 4 echo round(1.95583, 2); // Affiche 1.96 echo round(1241757, -3); // Affiche 1242000 echo ceil(7.2); // 8 echo ceil(99.999); // 100 echo floor(7.2); // 7 echo floor(99.999); // 99 ?>
Fonctions usuelles Travailler sur différentes bases • Il est parfois nécessaire de travailler sur des chiffres binaires (base 2) ou des hexadécimaux (base 16). Pour gérer des conversions de nombres entre différentes bases, PHP propose la fonction base_convert (nombre , frombase , tobase ), frombase et tobase doivent être compris entre 2 et 36 inclus. Les bases supérieures à 10 seront représentées avec les lettres de a=10 à z=36. <?php $binaire = base_convert(5531, 10, 2); echo $binaire; ?>
Fonctions usuelles Travailler sur différentes bases • Des fonctions dédiées à une conversion donnée existent pour des accès rapides : • bindec() : convertit de binaire en décimal ; • decbin() : convertit de décimal en binaire ; • dechex() : convertit de décimal en hexadécimal ; • decoct() : convertit de décimal en octal.
Fonctions usuelles Formater une date/heure locale • La fonction date (format , timestamp) retourne une date sous forme d’une chaîne, au format donné par le premier paramètre. La date est fournie par le second paramètre sous la forme d’un timestamp Unix. Si le second paramètre n’est pas renseigné, la date courante est utilisée. <?php $format = 'd-m-y, H:i:s' ; $date = date($format) ; echo $date ; // Affiche une date sous la forme : 31-04-04, 23:59:59 ?>
Fonctions usuelles Formater une date/heure locale
Fonctions usuelles Formater une date/heure locale • Pour calculer un timestamp à partir d’une représentation de date, vous pouvez utiliser la fonction strtotime(), qui convertit une date ISO en timestamp. Il existe plusieurs formats de date, mais ceux que vous rencontrerez sur Internet seront généralement compris par strtotime(). • Pour obtenir un timestamp à partir des différentes composantes d’une date, on utilise la fonction mktime(heure, minute, secondes, mois, jour, annee). <?php echo strtotime ('16 November 1976'); echo strtotime ('1976-11-16'); ?> <?php echo date("d/M/Y", mktime (0,0,0,12,32,2004))."<br>"; echo date("d/m/Y", mktime (0,0,0,13,1,2005))."<br>"; echo date("M-d-Y", mktime (0,0,0,1,1,2001)); ?>
Fonctions usuelles Tester les dates • La fonction checkdate(mois, jour, annee) renvoie TRUE si la date représentée par le jour, le mois et l’année donnés en paramètres est valide, FALSE sinon. Les années bissextiles sont prises en compte. <?php // On récupère la date d’anniversairefournie // sous la forme JJ/MM/AAAA $anniversaire = $_REQUEST['anniversaire']; $tab = explode("/",$anniversaire); // On vérifiequecette date estvalide if (checkdate($tab[1],$tab[0],$tab[2])){ echo 'La date estvalide.'; }else{ echo 'La date est invalide.'; } ?>
Fonctions usuelles Comparer les dates • Il est possible grâce aux fonctions de date, de calculer les temps d’exécution de tout ou partie de vos scripts. Il vous faut pour cela utiliser la fonction time(), qui renvoie le timestamp actuel, aux différents moments que vous souhaitez évaluer et de stocker les valeurs afin de les comparer. • La fonction microtime() fonctionne de manière identique, mais renvoie aussi la partie décimale de l’heure en cours. <?php $tps1 = time(); // Divers traitements. $tps2 = time(); $tps = $tps2 – $tps1; echo "Le temps nécessaire à l’exécution des traitements est $tps"; ?>
Fonctions usuelles Comparer les dates <?php functiontempspasse($time) { // Calcul du temps écoulé (en secondes) $diff = time()-$time; $dif_jour = floor($diff/60/60/24); $diff -= $dif_jour*60*60*24; $dif_heure = floor($diff/60/60); $diff -= $dif_heure*60*60; $dif_min = floor($diff/60); $diff -= $dif_min*60; $dif_sec = $diff; return ('(Temps écoulé '.$dif_jour.'j '.$dif_heure.'h'. $dif_min.'m '.$dif_sec.'s)'); } /* On va afficher le temps qui s’est écoulé depuis la création du fichier phpinfo.php: */ echotempspasse(filectime('phpinfo.php'));
Fonctions usuelles Résolution DNS d’une adresse IP • La fonction checkdnsrr(hôte [, type]) vérifie qu’il existe bien un enregistrement DNS de type type correspondant au paramètre hôte. Elle renvoie TRUE si un enregistrement a été trouvé, et FALSE en cas d’échec. • Le paramètre type peut être l’une des valeurs suivantes : A, MX, NS, SOA, PTR, CNAME (alias), AAAA (adresse IPV6), ou ANY (composé de tous les autres). La valeur par défaut est MX. <?php if (checkdnsrr("anaska.com")) echo "Le nom de domaine existe"; ?>
Fonctions usuelles Corrélation IP/DNS • La fonction dns_get_record() lit les données DNS associées à un hôte passé en paramètre. La fonction renvoie un tableau associatif, contenant au minimum les index : host, type, class et ttl. • La fonction inverse est la fonction gethostbyaddr(), qui renvoie le nom d’hôte correspondant à une adresse IP. <?php $result = dns_get_record("php.net"); echo '<pre>' ; print_r($result); echo '</pre>' ; ?>
Fonctions usuelles chiffrement, hachage, codage/décodage • Sous le terme de chiffrement, nous distinguerons en fait deux termes plus précis et plus corrects : hachage et codage (et décodage). • Le procédé de hachage est une opération à sens unique qui permet d’obtenir une chaîne non prédictible et qui semble aléatoire à partir d’un texte ou d’une donnée. La chaîne résultante est généralement assez courte. • Les procédés de codage et décodage permettent, eux, d’avoir une opération à double sens. Une fois la chaîne transformée, il est possible de revenir à la donnée d’origine, que ce soit avec un mot de passe ou grâce à un système plus complexe.
Fonctions usuelles chiffrement, hachage, codage/décodage • Il y a trois applications classiques aux fonctions de hachage. • les mots de passe : Plutôt que de stocker un mot de passe en claire, il est possible de stocker son hachage. • l’identification : Les chaînes hachées sont généralement courtes (32 caractères pour le hachage MD5 par exemple). • vérifier l’intégrité d’un fichier transféré.
Fonctions usuelles chiffrement, hachage, codage/décodage • La fonction PHP pour la méthode de hachage CRC32 se nomme crc32(). Il suffit de lui donner en argument une chaîne de caractères ou des données binaires et elle renvoie un entier. <?php $fichier = 'test2.php'; $crc = crc32( file_get_contents($fichier) ); echo $crc; ?>
Fonctions usuelles chiffrement, hachage, codage/décodage • La fonction PHP pour la méthode de hachage MD5 se nomme md5() et md5_file($fichier). <?php $donnee = 'secretXzB'; $md5 = md5( $donnee ); echo $md5 ; ?>
Fonctions usuelles chiffrement, hachage, codage/décodage • Le SHA1 est similaire au MD5 mais renvoie une chaîne légèrement plus longue (40 caractères hexadécimaux, ou 20 octets). La probabilité d’une collision (deux valeurs avec le même résultat) est donc plus rare ; plus exactement, pour deux données précisées, il y a une chance sur 2^20 qu’elles aient le même résultat. En conséquence, ce procédé de hachage est aussi légèrement plus lent. • Les fonctions sha1() et sha1_file() sont par ailleurs en tout point similaires à md5() et md5_file().
Fonctions usuelles chiffrement, hachage, codage/décodage • Les fonctions de codage et décodage se séparent elles-mêmes en deux groupes : les codages à clé publique et les codages à clé privée. Les premiers désignent les codages qui emploient la même clé (ou le même mot de passe) pour coder et décoder la donnée. Les autres permettent d’avoir un mot-clé pour coder et un pour décoder. Généralement, on en réserve un pour soi et on diffuse l’autre. • Le module mcrypt dans PHP gère pratiquement tous les algorithmes et les méthodes de codage qui sont rencontrées le plus souvent.
Fonctions usuelles <?php // On retient l’heure de démarrage du script $time = time() ; // On définit une fonction qui enregistrera le temps écoulé // dans un fichier de statistiques function statistiques() { global $time ; $fp = fopen('stats.txt', 'a') ; flock($fp, LOCK_EX) ; $secondes = time() - $time ; fputs($fp, "exécution de $secondes secondes\n" ; fclose($fp) ; } // Enregistrement de la fonction pour qu’elle s’exécute à la fin register_shutdown_function('statistiques') ; /* Mettez ici votre script normal son temps d’exécution sera calculé et enregistré dans stats.txt */ Fonction à l’arrêt du script • PHP exécute automatiquement certaines actions à la clôture du script. Vous pouvez vous-même enregistrer du code pour qu’il soit exécuté juste avant l’arrêt du script. • Si vous fournissez un nom de fonction à register_shutdown_function(), PHP l’enregistre et l’exécute juste avant de terminer le script. La fonction n’est appelée à la fin de l’exécution que si elle se termine normalement. Une erreur fatale, un appel à exit() ou die() arrête brutalement le script, sans appeler les fonctions enregistrées.
Fonctions usuelles Exécution d’une chaîne de code PHP • Il peut être utile quelques fois de pouvoir produire dynamiquement du code PHP et l’exécuter dans la foulée. La fonction eval() peut alors vous être utile. Elle prend en paramètre une chaîne de caractères qui contient du code PHP et l’exécute. Si votre code contient une instruction return, l’exécution du code inséré s’arrête et eval() retourne la valeur en question. <?php $code = " \$a++ ; \$a .= \"texte\" ; return \$a" ; $a = 1 ; $a = eval($code) echo $a ; // Affiche 2texte
Formulaires et superglobales Déclaration d’un formulaire • Un formulaire HTML est une zone dans laquelle vous insérez des champs et des contrôles que le visiteur manipulera via son navigateur. On peut y définir des champs de saisie de texte, des cases à cocher, des listes d’options, des champs cachés, des mots de passe, des fichiers à envoyer, etc. <form action='reception_formulaire.php'> <!-- Différents champs et balises de données. --> </form>
Formulaires et superglobales Méthode d’envoi du formulaire • Méthode GET (transmission par URL) :Une des façons les plus simples pour faire transiter des données de page en page est l’insertion de ces données dans l’URL (ce qui est affiché dans la barre d’adresse du navigateur). • Méthode POST <form action="script.php" method="POST"><p> Entrez du texte :<BR> <input name="variable" type="text"><br> <input type="submit" value="valider"> </p></form>
Formulaires et superglobales Quelle méthode utiliser ? • Le plus souvent, vous pouvez choisir indifféremment l’une ou l’autre méthode d’envoi. Toutefois, la méthode POST s’impose dans les cas suivants : • envoi d’un fichier ; • envoi de données importantes en taille ; • envoi de données confidentielles (un mot de passe par exemple) ; • si le formulaire déclenche une action spécifique qui doit être renouvelée à chaque fois (modération d’un article par exemple). • La méthode GET est recommandée pour tous les autres cas.
Formulaires et superglobales Champ de texte • Ils sont créés à partir de la balise <input> en définissant l’attribut type comme étant du texte (type="text"). On utilise ce type de champ quand on a besoin de recueillir de la part de l’utilisateur des mots ou des textes de taille limitée. <form action="form.php" method="POST"><p> Entrez du texte : <br> <input type="text" name="champ1"><br> <input type="Submit" value="Soumettre la requête"> </p></form>
Formulaires et superglobales Zone de texte • Il est souvent nécessaire de disposer d’un affichage permettant de caler une plus grande zone de texte. Pour cela, on utilise des zones de texte délimitées par les balises <textarea></textarea>. <form action="./form.php" method="POST"><p> Contenu de l'article :<br> <textarea name="texte_long"></texarea> <input type="submit" value="Soumettre la requête"> </p></form>
Formulaires et superglobales Cases à cocher • Les cases permettent d’interagir avec vos utilisateurs en définissant vous-même les réponses possibles. L’interaction avec le visiteur est moindre mais permet de faciliter le traitement informatique des réponses. <form action="./form.php" method="POST"></p> Disposezvous de l'ADSL ? <input type="checkbox" name="qcm1"><br> <input type="Submit" value="Soumettre la requête"> </form> • Par défaut, les cases à cocher renvoient la valeur On quand elles sont cochées. On peut cependant changer la valeur associée à une case à cocher via l’attribut value.
Formulaires et superglobales Bouton radio • Les boutons radio sont assez semblables aux cases à cocher, si ce n’est qu’ils ne permettent qu’un seul choix sur un ensemble. L’application la plus directe est la création d’un questionnaire à choix multiples <form action="cases.php" method="POST"><p> Qui était Cyrus ?<br> <input type="Radio" name="radio1" value=1> Le premier ... <input type="Radio" name="radio1" value=2> Un empereur ... <input type="Radio" name="radio1" value=3> Cyrus le ... <input type="submit" value="valider"> </p></form>
Formulaires et superglobales Liste de sélections et liste déroulante • La liste déroulante permet d’afficher en un espace réduit une liste d’éléments. <select name= "salaire"> < !--Ici les différentes options possibles--> <option value="1">Moins de 1000 euros</option> <option value="2">Entre 1000 et 2000</option> <option value="3">Entre 2000 et 4000</option> <option value="4">Plus de 4000</option> </select>
Formulaires et superglobales Liste de sélections et liste déroulante • Par défaut, le navigateur proposera une liste déroulante, comme à l’exemple précédent. Ce type de liste n’est pas forcément adapté lorsque les choix sont nombreux. Vous pouvez demander une liste dans un cadre plus classique, en spécifiant un nombre de lignes à afficher dans l’attribut size. <select name="id_langage" size="6"> <option value="1">PHP</option> <option value="2">C</option> <option value="3">JAVA</option> <option value="4">C++</option> <option value="5">HTML</option> <option value="6">PERL</option> </select> <input type="submit" name="Submit" value="Envoyer">
Formulaires et superglobales Liste pour sélections multiples • La liste déroulante que nous venons de voir a un gros défaut : elle ne permet de choisir qu’un seul élément. Si vous avez besoin que l’utilisateur fasse plusieurs choix dans votre liste, il est possible d’ajouter un attribut vide multiple à la balise <select>. <select name="id_langage[]" size="6" multiple> <option value="1">PHP</option> <option value="2">C</option> <option value="3">JAVA</option> <option value="4">C++</option> <option value="5">HTML</option> <option value="6">PERL</option> </select> <input type="submit" name="Submit" value="Envoyer">
Formulaires et superglobales Champs cachés • Les champs cachés servent à envoyer une valeur sans que l’utilisateur ne le voie et ne puisse la modifier. Ils sont placés dans le formulaire HTML sous la forme : <input type="hidden" name="identifiant" value="52"> • L’utilisation la plus fréquente est faite dans les formulaires en plusieurs pages. On évite généralement de faire le traitement à la fin de chaque page car si l’utilisateur ne va pas jusqu’au bout, les données peuvent présenter des incohérences. On stocke alors dans des champs cachés les données de la page précédente et on les traite toutes lors de la soumission de la dernière page du formulaire.
Formulaires et superglobales Image cliquable • Il est possible de créer un bouton de validation graphique. Pour cela, on définira le type image dans une balise input. Les champs additionnels src et altdéfinissent respectivement l’adresse de l’image à afficher et un texte alternatif pour ceux qui n’affichent pas les images (les deux sont obligatoires). <input type="image" name="img" src="images/logo.gif" alt="logo"> • Quand le visiteur clique sur l’image pour soumettre le formulaire, le navigateur récupère la position du clic et en envoie les coordonnées avec le formulaire.
Formulaires et superglobales Envoi d’images et de fichiers • Il est tout à fait possible dans un formulaire de permettre à un utilisateur d’envoyer des images ou des fichiers dont il dispose sur son poste. On utilise dans ce but la balise <input type="file">. Contrairement aux autres balises, il faut spécifier dans la balise <form> que nous enverrons des données autres que textuelles. Pour cela, on se sert de l’attribut enctype en lui attribuant la valeur multipart/form-data. <form action="up.php" method="POST" enctype="multipart/form-data"> <P> <input type="file" name="fichier" size="40"> <input type="submit" value="Envoyer"> </P> </form>
Formulaires et superglobales Utilisation des superglobales • Toutes les données envoyées se retrouvent dans ce qu’on appelle des superglobales. Il s’agit de tableaux qui ont une portée globale où qu’ils soient utilisés. Vous pouvez y accéder depuis un contexte global, depuis une fonction ou une méthode de classe sans avoir besoin de vous soucier de la portée des variables. nous utiliserons quatre superglobales : • Le tableau $_GET[] contient toutes les données envoyées via l’URL. • Le tableau $_POST[] contient les données envoyées via un formulaire en POST (attribut method="post"). • Le tableau $_FILES[] contient les informations sur les fichiers envoyés par le visiteur. • Le tableau $_REQUEST[] est quant à lui une fusion des deux premiers avec la superglobale $_COOKIE[]. Si des données avec le même nom sont envoyées via plusieurs méthodes, la priorité est donnée aux cookies, puis à la méthode POST.
Formulaires et superglobales Récupération d’une donnée simple • Pour récupérer le contenu d’un champ de formulaire du nom de X, il suffit de lire l’index X de la superglobale. <form action="form.php" method="POST"><p> Entrezvotretexte : <br> <input type="text" name="montexte"><br> <input type="Submit"> </p></form> echo $_REQUEST['montexte'] ;
Formulaires et superglobales Gestion des magic_quotes • Si la directive de configurationmagic_quotes_gpc (gpc correspond à get post cookies) est activée dans votre configuration, PHP modifie toutes les données reçues avant que vous n’y accédiez. Il procède de la même façon que la fonction addslashes(), en ajoutant une barre oblique inverse devant certains caractères comme les apostrophes ou les barres obliques inverses elles-mêmes. Cette conversion est faite pour permettre d’utiliser sans risque les données dans des requêtes SQL (vous êtes alors protégé contre les injections SQL les plus courantes). if (get_magic_quotes_gpc()) { $donneePourSQL = $_REQUEST['donnee'] ; } else { $donneePourSQL = addslashes( $_REQUEST['donnee'] ) ; }
Formulaires et superglobales Utilisation des cases à cocher • La valeur par défaut (modifiable lors de la création du formulaire) d’une case à cocher est On. Ce texte sera transmis uniquement si la case est cochée, sinon rien ne sera envoyé.Vous pouvez donc tester l’état d’une case à cocher avec la fonction isset(). Si l’élément cherché existe (quelle que soit sa valeur), c’est que la case a été cochée, sinon c’est qu’elle est décochée. if ( isset($_REQUEST['case_a_cocher']) ) { echo 'La case estcochée ' ; echo 'savaleurest ', $_REQUEST['case_a_cocher'] ; } else { echo 'La case n\’est pas cochée' ; }
Formulaires et superglobales Validation de données avec l’extension Filter • Une solution de filtrage simple est arrivée avec la version 5.2 de PHP : il s’agit de l’extension Filter. Cette extension permet de valider et de filtrer les données venant habituellement de sources non sécurisées comme les entrées utilisateur. • L’extension est composée de quatre composants : • une liste de fonctions qui permettent d’agir sur les données en entrée et d’y appliquer éventuellement des filtres ; • une liste de constantes représentant les sources de données (GET, POST, COOKIE, etc.) sur lesquelles appliquer les fonctions précédentes ; • une liste de filtres à appliquer, ou non, aux données ; • une liste d’options permettant de gérer finement l’application des filtres. • La combinaison de ces composants permet, par exemple, de tester l’existence d’une variable adresse provenant d’un formulaire, puis de la récupérer tout en vérifiant qu’il s’agit bien d’une adresse e-mail.
Formulaires et superglobales Validation d’une adresse e-mail • Afin de vous permettre de voir d’un seul coup d’œil les possibilités de cette extension, prenons un exemple classique : la réception d’un formulaire contenant une adresse e-mail. L’extension Filter va nous permettre de valider qu’il s’agit là d’une adresse e-mail bien formée. <form method='POST' action='filter.php'> <input type=text name=mel> <input type="Submit" value="Soumettre la requête"> </form> <?php // Validation $mail = filter_input(INPUT_POST, 'mel', FILTER_VALIDATE_EMAIL) ; if ($mail === FALSE){ echo 'Le mail fourni n est pas valide' ; }elseif($mail === NULL){ echo 'mel n était pas définie.' ; }else{ echo "La variable estuneadresse e-mail valide : $mail"; } ?>
Formulaires et superglobales Filtrer une variable • On filtre une variable avec la fonction filter_var(). Celle-ci prend comme arguments une variable et un type de filtre. Il est également possible de lui ajouter un tableau d’options en troisième argument. La fonction retourne la variable filtrée, ou FALSE en cas d’échec. • Dans l’exemple suivant, nous utilisons FILTER_SANITIZE_SPECIAL_CHARS qui filtre tous les caractères spéciaux en HTML et XML pour les convertir en entité. <?php $adresse = "Bonjour <b>Éric<b>" ; $message = filter_var($adresse, FILTER_SANITIZE_SPECIAL_CHARS) ; echo $message ; ?>
Formulaires et superglobales Les filtres les plus courants • Les filtres sont représentés par des constantes. On les passera en paramètres des fonctions que nous utiliserons. On peut distinguer deux types de filtres : les filtres de validation et ceux dits de conversion. La liste de tous les filtres disponibles peut être obtenue via la fonction filter_list(). • Seuls deux filtres n’appartiennent à aucune de ces deux catégories : • Le filtre FILTER_UNSAFE_RAW se contente de retourner les données sans rien vérifier ni modifier. • Le filtre FILTER_CALLBACK permet d’appeler une fonction utilisateur qui validera les données.