fgetss()
La funzione fgetss() legge una riga da un file e rimuove i tag HTML o PHP. Deprecata in PHP 7.3 e rimossa in PHP 8.0.
Cos'è la funzione fgetss()?
Importante:
fgetss()è stata deprecata in PHP 7.3 e rimossa in PHP 8.0. Genera un errore fatale (Call to undefined function fgetss()) su qualsiasi versione moderna di PHP. Questa pagina documenta cosa faceva e mostra la sostituzione supportata —fgets()combinata constrip_tags()— in modo da poter leggere e migrare il codice legacy.
La funzione fgetss() (abbreviazione di "file get string, strip") leggeva una singola riga da un file aperto e rimuoveva tutti i tag HTML e PHP da quella riga prima di restituirla. Si comportava esattamente come fgets() — leggendo fino a un'interruzione di riga, alla lunghezza specificata o alla fine del file — con un passaggio aggiuntivo: i tag venivano rimossi durante la restituzione.
Era sostanzialmente una scorciatoia per strip_tags(fgets($handle)), il che è esattamente il motivo per cui PHP l'ha eliminata: lo stesso risultato si ottiene con una composizione ovvia di due funzioni ben note, quindi una funzione dedicata aggiungeva poco valore ed era facile da usare in modo improprio per la sicurezza.
Ecco la sintassi che usava:
La sintassi PHP di fgetss()
fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string|false| Parametro | Descrizione |
|---|---|
handle | Un puntatore a file restituito da fopen(). Obbligatorio. |
length | Opzionale. Il numero massimo di byte da leggere. La lettura si interrompe a questa lunghezza, a un'interruzione di riga o a EOF — a seconda di quale si verifica prima. Omettere per leggere l'intera riga. |
allowable_tags | Opzionale. Una string di tag che non devono essere rimossi, ad es. "<b><i>". |
Valore restituito: la riga successiva con i tag rimossi, oppure false quando viene raggiunta la fine del file o in caso di errore.
Un errore comune era assumere che
fgetss()sanificasse l'input in modo sicuro. Rimuoveva solo i tag tramite un parser semplice — non neutralizzava mai attributi comeonclick=o URLjavascript:. Per un vero escaping dell'output usahtmlspecialchars(), non la rimozione dei tag.
Come leggere e rimuovere i tag in PHP?
L'uso della funzione fgetss() era simile all'uso della funzione fgets(). Ecco i passaggi da seguire:
- Aprire il file usando la funzione
fopen(). - Usare la funzione
fgets()per leggere una riga dal file, quindi applicarestrip_tags()per rimuovere eventuali tag. - Chiudere il file usando la funzione
fclose().
Ecco un esempio completo e autonomo. Scrive un piccolo file HTML, poi lo rilegge riga per riga con fgets(), rimuovendo i tag da ciascuna riga:
Come usare fgets() e 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);Output:
Hello
WorldAlcune note su questo idioma:
- Testa il valore restituito, non
feof(). Leggere conwhile (($line = fgets($file)) !== false)è più robusto diwhile (!feof($file)), perchéfeof()diventatruesolo dopo una lettura fallita — il ciclo più vecchio può elaborare un'ultima lettura vuota. Usare un confronto stretto!== falseevita anche di trattare una riga legittima come"0"come fine del file. - Mantieni alcuni tag.
fgetss()accettava un argomentoallowable_tags; anchestrip_tags()lo accetta, quindi la migrazione è diretta:strip_tags($line, "<b><i>")mantiene<b>e<i>rimuovendo tutto il resto. - La rimozione non è sanificazione. Se stai visualizzando contenuto di file non attendibile in un browser, eseguine l'escaping con
htmlspecialchars()invece di (o in aggiunta a) rimuovere i tag.
Quando hai finito di leggere, rilascia sempre l'handle con fclose().
Conclusione
La funzione fgetss() è obsoleta: è stata deprecata in PHP 7.3 e rimossa in PHP 8.0, quindi non deve essere utilizzata nel nuovo codice. Per leggere un file riga per riga rimuovendo i tag HTML o PHP, combina fgets() con strip_tags() — passa un argomento allowable_tags se devi mantenere tag specifici. Per una vera sicurezza dell'output, usa htmlspecialchars(). Per approfondire l'I/O su file, consulta fopen(), feof() e fclose().