W3docs

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 con strip_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
ParametroDescrizione
handleUn puntatore a file restituito da fopen(). Obbligatorio.
lengthOpzionale. 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_tagsOpzionale. 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 come onclick= o URL javascript:. Per un vero escaping dell'output usa htmlspecialchars(), 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:

  1. Aprire il file usando la funzione fopen().
  2. Usare la funzione fgets() per leggere una riga dal file, quindi applicare strip_tags() per rimuovere eventuali tag.
  3. 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
World

Alcune note su questo idioma:

  • Testa il valore restituito, non feof(). Leggere con while (($line = fgets($file)) !== false) è più robusto di while (!feof($file)), perché feof() diventa true solo dopo una lettura fallita — il ciclo più vecchio può elaborare un'ultima lettura vuota. Usare un confronto stretto !== false evita anche di trattare una riga legittima come "0" come fine del file.
  • Mantieni alcuni tag. fgetss() accettava un argomento allowable_tags; anche strip_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().

Esercitazione

Pratica
Cosa fa la funzione fgetss() in PHP?
Cosa fa la funzione fgetss() in PHP?
Was this page helpful?