Signatur
Beschreibung
fgetss() funktioniert ähnlich wie fgets(), wendet jedoch zusätzlich strip_tags() auf die gelesene Zeile an, bevor sie zurückgegeben wird. Damit eignet sich die Funktion zum schnellen Einlesen von Text aus HTML- oder PHP-Dateien, wenn der rohe Tag-freie Inhalt benötigt wird.
Über den optionalen Parameter allowable_tags kann eine Liste von HTML-Tags angegeben werden, die nicht entfernt werden sollen – z. B. '<b><i>'. Alle anderen Tags werden aus der gelesenen Zeile gestrichen.
Die Funktion liest maximal length - 1 Bytes aus dem Stream. Wird kein length-Wert angegeben oder auf 0 gesetzt, liest sie bis zum Zeilenende. Der Dateizeiger rückt nach jedem Aufruf automatisch weiter.
Achtung: fgetss() wurde mit PHP 7.3.0 als veraltet (deprecated) markiert und in PHP 8.0.0 vollständig entfernt. Als Ersatz sollte fgets() in Kombination mit strip_tags() verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $handle Pflicht | resource | Ein gültiger Datei-Handle, der z. B. mit fopen() geöffnet wurde. |
|
| $length | int | 0 | Maximale Anzahl der zu lesenden Bytes. Wird 0 übergeben oder der Parameter weggelassen, liest die Funktion bis zum Ende der aktuellen Zeile. |
| $allowable_tags | string | Eine Zeichenkette mit HTML-Tags, die nicht entfernt werden sollen, z. B. '<b><strong>'. Alle anderen Tags werden aus dem gelesenen Text gestrichen. |
Rückgabewert
string zurück. Bei einem Fehler oder am Ende der Datei (EOF) wird false zurückgegeben.Beispiele
HTML-Datei zeilenweise ohne Tags einlesen
<?php
// Beispiel-Datei: inhalt.html
// <h1>Willkommen</h1>
// <p>Dies ist ein <strong>Test</strong>.</p>
$handle = fopen('inhalt.html', 'r');
if ($handle) {
while (!feof($handle)) {
$zeile = fgetss($handle);
if ($zeile !== false) {
echo $zeile;
}
}
fclose($handle);
}
Bestimmte Tags beim Lesen beibehalten
<?php
// Beispiel-Datei: inhalt.html
// <p>Ein <strong>wichtiger</strong> <em>Hinweis</em>.</p>
$handle = fopen('inhalt.html', 'r');
if ($handle) {
while (!feof($handle)) {
// <strong> wird beibehalten, <em> wird entfernt
$zeile = fgetss($handle, 1024, '<strong>');
if ($zeile !== false) {
echo $zeile;
}
}
fclose($handle);
}
Moderner Ersatz mit fgets() und strip_tags()
<?php
// Empfohlene Alternative für PHP 7.3+ und PHP 8+
$handle = fopen('inhalt.html', 'r');
if ($handle) {
while (!feof($handle)) {
$zeile = fgets($handle);
if ($zeile !== false) {
echo strip_tags($zeile, '<strong>');
}
}
fclose($handle);
}
// Wichtig · Fallstricke
Deprecation: fgetss() wurde in PHP 7.3.0 als veraltet markiert und in PHP 8.0.0 vollständig entfernt. Code, der diese Funktion verwendet, muss vor einer Migration auf PHP 8 angepasst werden. Die empfohlene Alternative ist fgets() in Kombination mit strip_tags().
Sicherheitshinweis: Das Entfernen von Tags durch fgetss() bietet keinen vollständigen Schutz vor XSS, da schädliche Inhalte auch ohne Tags (z. B. in Event-Attributen) übrig bleiben können. Für sicherheitskritische Anwendungen sollte ein dedizierter HTML-Purifier eingesetzt werden.
Die Funktion entfernt keine HTML-Entities wie & oder < – dafür ist ggf. html_entity_decode() zusätzlich nötig.