W3docs

fgetss()

Функция fgetss() в PHP читает строку из файла и удаляет HTML и PHP-теги. Устарела в PHP 7.3, удалена в PHP 8.0.

Что такое функция fgetss()?

Важно: fgetss() была устаревшей в PHP 7.3 и удалена в PHP 8.0. На любой современной версии PHP она вызовет фатальную ошибку (Call to undefined function fgetss()). На этой странице описано, что она делала, и показана поддерживаемая замена — fgets() в сочетании с strip_tags() — чтобы вы могли читать и переносить устаревший код.

Функция fgetss() (сокращение от «file get string, strip») читала одну строку из открытого файла и удаляла из неё все HTML- и PHP-теги перед возвратом. Она работала точно так же, как fgets() — читая до символа новой строки, до указанной длины или до конца файла — с одним дополнительным шагом: теги удалялись на выходе.

По сути это было сокращение для strip_tags(fgets($handle)), именно поэтому PHP от неё отказался: тот же результат достигается очевидной комбинацией двух хорошо понятных функций, поэтому отдельная функция почти не добавляла ценности и была легко подвержена злоупотреблениям в плане безопасности.

Вот синтаксис, который она использовала:

Синтаксис PHP функции fgetss()

fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string|false
ПараметрОписание
handleУказатель на файл, возвращённый функцией fopen(). Обязательный.
lengthНеобязательный. Максимальное количество байт для чтения. Чтение останавливается при достижении этой длины, символа новой строки или EOF — в зависимости от того, что наступит первым. Опустите, чтобы читать всю строку.
allowable_tagsНеобязательный. Строка тегов, которые не должны удаляться, например "<b><i>".

Возвращаемое значение: следующая строка с удалёнными тегами или false, когда достигнут конец файла или произошла ошибка.

Распространённой ошибкой было предположение, что fgetss() безопасно санирует входные данные. Она только удаляла теги с помощью простого парсера — она никогда не нейтрализовала атрибуты, такие как onclick= или URL вида javascript:. Для настоящего экранирования вывода используйте htmlspecialchars(), а не удаление тегов.

Как читать файл и удалять теги в PHP?

Использование функции fgetss() было похоже на использование функции fgets(). Вот шаги, которые нужно выполнить:

  1. Откройте файл с помощью функции fopen().
  2. Используйте функцию fgets() для чтения строки из файла, затем примените strip_tags() для удаления тегов.
  3. Закройте файл с помощью функции fclose().

Вот полный самодостаточный пример. Он записывает небольшой HTML-файл, затем читает его построчно с помощью fgets(), удаляя теги из каждой строки:

Как использовать fgets() и 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);

Вывод:

Hello
World

Несколько замечаний об этом подходе:

  • Проверяйте возвращаемое значение, а не feof(). Чтение с помощью while (($line = fgets($file)) !== false) надёжнее, чем while (!feof($file)), потому что feof() становится true только после неудачного чтения — старый цикл может обработать пустое финальное чтение. Использование строгого сравнения !== false также позволяет избежать интерпретации допустимой строки типа "0" как конца файла.
  • Сохраняйте некоторые теги. fgetss() принимала аргумент allowable_tags; strip_tags() тоже его принимает, поэтому миграция прямолинейна: strip_tags($line, "<b><i>") сохраняет <b> и <i>, удаляя всё остальное.
  • Удаление тегов — не санирование. Если вы отображаете ненадёжное содержимое файла в браузере, экранируйте его с помощью htmlspecialchars() вместо (или в дополнение к) удаления тегов.

Завершив чтение, всегда освобождайте дескриптор с помощью fclose().

Заключение

Функция fgetss() устарела: она была помечена устаревшей в PHP 7.3 и удалена в PHP 8.0, поэтому её нельзя использовать в новом коде. Чтобы читать файл построчно с удалением HTML или PHP-тегов, комбинируйте fgets() с strip_tags() — передавайте аргумент allowable_tags, если нужно сохранить определённые теги. Для настоящей безопасности вывода используйте htmlspecialchars(). Для более глубокого изучения файлового ввода-вывода см. fopen(), feof() и fclose().

Практика

Практика
Что делает функция fgetss() в PHP?
Что делает функция fgetss() в PHP?
Was this page helpful?