fgetss()
Die Funktion fgetss() liest eine Zeile aus einer Datei und entfernt HTML- oder PHP-Tags. Sie wurde in PHP 7.3 als veraltet markiert und in PHP 8.0 entfernt.
Was ist die Funktion fgetss()?
Wichtig:
fgetss()wurde in PHP 7.3 als veraltet markiert und in PHP 8.0 entfernt. In jeder modernen PHP-Version führt sie zu einem schwerwiegenden Fehler (Call to undefined function fgetss()). Diese Seite dokumentiert, was die Funktion tat, und zeigt den unterstützten Ersatz —fgets()kombiniert mitstrip_tags()— damit Sie Legacy-Code lesen und migrieren können.
Die Funktion fgetss() (kurz für „file get string, strip") liest eine einzelne Zeile aus einer geöffneten Datei und entfernte alle HTML- und PHP-Tags aus dieser Zeile, bevor sie zurückgegeben wird. Sie verhielt sich genau wie fgets() — liest bis zu einem Zeilenumbruch, der angegebenen Länge oder dem Dateiende — mit einem zusätzlichen Schritt: Die Tags wurden beim Lesen entfernt.
Sie war im Wesentlichen eine Kurzform für strip_tags(fgets($handle)), weshalb PHP sie genau deshalb eingestellt hat: Das gleiche Ergebnis lässt sich durch eine offensichtliche Kombination zweier wohlverstandener Funktionen erzielen, sodass eine eigene Funktion kaum einen Mehrwert bot und leicht missbraucht werden konnte.
Hier ist die verwendete Syntax:
Die PHP-Syntax von fgetss()
fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string|false| Parameter | Beschreibung |
|---|---|
handle | Ein Dateizeiger, der von fopen() zurückgegeben wird. Erforderlich. |
length | Optional. Die maximale Anzahl von Bytes, die gelesen werden sollen. Das Lesen stoppt bei dieser Länge, einem Zeilenumbruch oder EOF — je nachdem, was zuerst eintritt. Weglassen, um die gesamte Zeile zu lesen. |
allowable_tags | Optional. Ein string mit Tags, die nicht entfernt werden sollen, z. B. "<b><i>". |
Rückgabewert: die nächste Zeile mit entfernten Tags oder false, wenn das Dateiende erreicht wird oder ein Fehler auftritt.
Ein häufiger Fehler war die Annahme, dass
fgetss()Eingaben sicher bereinigt. Sie entfernte nur Tags über einen einfachen Parser — Attribute wieonclick=oderjavascript:-URLs wurden nie neutralisiert. Für echtes Ausgabe-Escaping verwenden Siehtmlspecialchars()und nicht das Entfernen von Tags.
Wie liest man Dateien und entfernt Tags in PHP?
Die Verwendung der Funktion fgetss() ähnelte der Verwendung der Funktion fgets(). Folgende Schritte sind zu beachten:
- Öffnen Sie die Datei mit der Funktion
fopen(). - Verwenden Sie die Funktion
fgets(), um eine Zeile aus der Datei zu lesen, und wenden Sie anschließendstrip_tags()an, um alle Tags zu entfernen. - Schließen Sie die Datei mit der Funktion
fclose().
Hier ist ein vollständiges, in sich geschlossenes Beispiel. Es schreibt eine kleine HTML-Datei und liest sie dann Zeile für Zeile mit fgets() zurück, wobei Tags aus jeder Zeile entfernt werden:
Verwendung von fgets() und 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);Ausgabe:
Hello
WorldEinige Dinge sind bei diesem Idiom zu beachten:
- Prüfen Sie den Rückgabewert, nicht
feof(). Das Lesen mitwhile (($line = fgets($file)) !== false)ist robuster alswhile (!feof($file)), dafeof()erst nach einem fehlgeschlagenen Lesevorgangtruewird — die ältere Schleife kann einen leeren abschließenden Lesevorgang verarbeiten. Die Verwendung eines strengen!== false-Vergleichs verhindert auch, dass eine legitime Zeile wie"0"als Dateiende behandelt wird. - Bestimmte Tags beibehalten.
fgetss()akzeptierte einallowable_tags-Argument;strip_tags()tut das ebenfalls, sodass die Migration direkt ist:strip_tags($line, "<b><i>")behält<b>und<i>bei und entfernt alles andere. - Entfernen ist kein Bereinigen. Wenn Sie nicht vertrauenswürdige Dateiinhalte im Browser rendern, escapen Sie diese mit
htmlspecialchars()anstatt (oder zusätzlich zum) Entfernen von Tags.
Wenn Sie mit dem Lesen fertig sind, geben Sie den Handle immer mit fclose() frei.
Fazit
Die Funktion fgetss() ist veraltet: Sie wurde in PHP 7.3 als veraltet markiert und in PHP 8.0 entfernt, daher darf sie in neuem Code nicht verwendet werden. Um eine Datei zeilenweise zu lesen und dabei HTML- oder PHP-Tags zu entfernen, kombinieren Sie fgets() mit strip_tags() — übergeben Sie ein allowable_tags-Argument, wenn Sie bestimmte Tags beibehalten möchten. Für echte Ausgabesicherheit greifen Sie auf htmlspecialchars() zurück. Für einen tieferen Einblick in die Datei-E/A siehe fopen(), feof() und fclose().