Fgets: примеры (PHP)
fgets(resource $stream, ?int $length = null): string|falseОписание функции fgets
fgets — это встроенная функция PHP для построчного чтения данных из файла. Она часто применяется при обработке текстовых файлов, логов, CSV-данных и других структурированных текстовых форматов, где требуется последовательное чтение.
- $stream (обязательный) — ресурс (дескриптор) файла, полученный с помощью функции fopen().
- $length (необязательный) — максимальное количество байт для чтения. Если параметр не указан, функция будет читать строку до тех пор, пока не достигнет конца строки или файла.
Функция возвращает прочитанную строку или false в случае ошибки или достижения конца файла (EOF).
Базовые примеры использования
$handle = fopen('example.txt', 'r');
if ($handle) {
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);
}Содержимое первой строки файла Содержимое второй строки файла
$handle = fopen('example.txt', 'r');
$line = fgets($handle, 10);
echo $line;
fclose($handle);Содержимое (первые 10 байт)
Похожие функции в PHP
Устаревшая функция, аналогичная fgets, но удаляющая HTML- и PHP-теги из строки. В PHP 7.3 помечена как устаревшая, в PHP 8.0 удалена.
Читает строку из файла и парсит её как CSV-данные, возвращая массив полей. Предпочтительнее использовать для работы с CSV-файлами.
Читает весь файл в массив, где каждый элемент представляет строку. Используется для небольших файлов, когда нужно получить все строки сразу.
Аналоги в других языках
Fgets в Python
with open('example.txt', 'r') as file:
line = file.readline()
print(line)Содержимое первой строки файла
const fs = require('fs');
const readline = require('readline');
const stream = fs.createReadStream('example.txt');
const rl = readline.createInterface({ input: stream });
rl.on('line', (line) => {
console.log(line);
});Fgets в MySQL
Для чтения файлов в MySQL используется команда LOAD DATA INFILE, которая загружает содержимое файла в таблицу.
LOAD DATA INFILE 'data.txt' INTO TABLE table_name;Типичные ошибки
$handle = fopen('missing.txt', 'r');
$line = fgets($handle); // Предупреждение, если файл не существует
echo $line;Warning: fopen(missing.txt): Failed to open stream: No such file or directory
$handle = fopen('example.txt', 'r');
fclose($handle);
$line = fgets($handle); // ПредупреждениеWarning: fgets(): supplied resource is not a valid stream resource
$handle = fopen('example.txt', 'r');
while (!feof($handle)) {
$line = fgets($handle);
echo $line;
// Отсутствие fgets для продвижения указателя
}Бесконечный цикл
Изменения в последних версиях PHP
В PHP 8.1.0 функция fgets теперь возвращает null при передаче нересурсного аргумента. Ранее выдавалось предупреждение и возвращалось false.
$result = fgets(null);
var_dump($result);PHP 8.0: Warning: fgets() expects parameter 1 to be resource, null given bool(false) PHP 8.1: null
Расширенные примеры
$handle = fopen('large.log', 'r');
if ($handle) {
while (($line = fgets($handle)) !== false) {
if (str_contains($line, 'ERROR')) {
echo $line;
}
}
fclose($handle);
}$handle = fopen('data.txt', 'r');
fseek($handle, 100); // Перемещаем указатель на 100 байт
$line = fgets($handle);
echo $line;
fclose($handle);$handle = fopen('access.log', 'r');
while (($line = fgets($handle)) !== false) {
$parts = explode(' ', $line);
if (count($parts) > 6) {
echo 'IP: ' . $parts[0] . ', Дата: ' . $parts[3] . '\n';
}
}
fclose($handle);$handle = fopen('image.jpg', 'rb');
$header = fgets($handle, 20); // Чтение первых 20 байт
echo bin2hex($header);
fclose($handle);ffd8ffe000104a464946