fgetss()
La fonction fgetss() de PHP lit une ligne d'un fichier et supprime les balises HTML ou PHP. Apprenez son remplacement moderne.
Qu'est-ce que la fonction fgetss() ?
Important :
fgetss()a été dépréciée en PHP 7.3 et supprimée en PHP 8.0. Elle déclenche une erreur fatale (Call to undefined function fgetss()) sur toute version moderne de PHP. Cette page documente ce qu'elle faisait et présente le remplacement supporté —fgets()combiné avecstrip_tags()— afin que vous puissiez lire et migrer du code hérité.
La fonction fgetss() (abréviation de « file get string, strip ») lisait une seule ligne d'un fichier ouvert et supprimait toutes les balises HTML et PHP de cette ligne avant de la retourner. Elle se comportait exactement comme fgets() — lisant jusqu'à un saut de ligne, la longueur fournie ou la fin du fichier — avec une étape supplémentaire : les balises étaient supprimées à la sortie.
Elle était en pratique un raccourci pour strip_tags(fgets($handle)), ce qui explique précisément pourquoi PHP l'a retirée : le même résultat s'obtient par une composition évidente de deux fonctions bien connues, de sorte qu'une fonction dédiée apportait peu de valeur et était facile à mal utiliser pour des raisons de sécurité.
Voici la syntaxe qu'elle utilisait :
La syntaxe PHP de fgetss()
fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string|false| Paramètre | Description |
|---|---|
handle | Un pointeur de fichier retourné par fopen(). Requis. |
length | Facultatif. Le nombre maximal d'octets à lire. La lecture s'arrête à cette longueur, à un saut de ligne ou à la fin du fichier — selon ce qui survient en premier. Omettez-le pour lire toute la ligne. |
allowable_tags | Facultatif. Une string de balises qui ne doivent pas être supprimées, par ex. "<b><i>". |
Valeur de retour : la ligne suivante avec les balises supprimées, ou false lorsque la fin du fichier est atteinte ou en cas d'erreur.
Une erreur courante consistait à supposer que
fgetss()nettoyait les entrées de façon sécurisée. Elle ne faisait que supprimer les balises via un analyseur simple — elle ne neutralisait jamais les attributs tels queonclick=ou les URLjavascript:. Pour un échappement de sortie réel, utilisezhtmlspecialchars(), et non la suppression de balises.
Comment lire et supprimer des balises en PHP ?
L'utilisation de la fonction fgetss() était similaire à l'utilisation de la fonction fgets(). Voici les étapes à suivre :
- Ouvrez le fichier à l'aide de la fonction
fopen(). - Utilisez la fonction
fgets()pour lire une ligne du fichier, puis appliquezstrip_tags()pour supprimer toutes les balises. - Fermez le fichier à l'aide de la fonction
fclose().
Voici un exemple complet et autonome. Il écrit un petit fichier HTML, puis le relit ligne par ligne avec fgets(), en supprimant les balises de chaque ligne :
Comment utiliser fgets() et strip_tags() ?
<?php
// Create a sample file containing HTML so the example runs on its own
file_put_contents("demo.txt", "<h1>Hello</h1>\n<p>World</p>\n");
$file = fopen("demo.txt", "r");
// Loop until fgets() returns false (end of file)
while (($line = fgets($file)) !== false) {
// Remove HTML/PHP tags from the line before printing
echo strip_tags($line);
}
fclose($file);Sortie :
Hello
WorldQuelques remarques sur cette approche :
- Testez la valeur de retour, pas
feof(). Lire avecwhile (($line = fgets($file)) !== false)est plus robuste quewhile (!feof($file)), carfeof()ne devienttruequ'après un échec de lecture — l'ancienne boucle peut traiter une dernière lecture vide. L'utilisation d'une comparaison stricte!== falseévite également de traiter une ligne légitime telle que"0"comme la fin du fichier. - Conservez certaines balises.
fgetss()acceptait un argumentallowable_tags;strip_tags()aussi, donc la migration est directe :strip_tags($line, "<b><i>")conserve<b>et<i>tout en supprimant tout le reste. - Supprimer n'est pas assainir. Si vous affichez du contenu de fichier non fiable dans un navigateur, échappez-le avec
htmlspecialchars()au lieu de (ou en plus de) supprimer les balises.
Lorsque vous avez terminé la lecture, libérez toujours le pointeur avec fclose().
Conclusion
La fonction fgetss() est obsolète : elle a été dépréciée en PHP 7.3 et supprimée en PHP 8.0, elle ne doit donc pas être utilisée dans du nouveau code. Pour lire un fichier ligne par ligne tout en supprimant les balises HTML ou PHP, combinez fgets() avec strip_tags() — passez un argument allowable_tags si vous avez besoin de conserver des balises spécifiques. Pour une véritable sécurité de sortie, utilisez htmlspecialchars(). Pour aller plus loin sur les entrées/sorties de fichiers, consultez fopen(), feof() et fclose().