Функция file_get_contents в PHP
file_get_contents в PHP читает содержимое файла или URL в строку. Узнайте синтаксис, параметры и примеры использования.
file_get_contents — это функция в PHP, которая используется для чтения содержимого файла в строку. Она особенно удобна при работе с текстовыми файлами и может применяться для получения содержимого файла как с удалённого сервера, так и из локальной файловой системы.
Синтаксис
Синтаксис функции file_get_contents выглядит следующим образом:
Синтаксис функции PHP file_get_contents
file_get_contents(
string $filename,
bool $use_include_path = false,
?resource $context = null,
int $offset = 0,
?int $maxlen = null
): string|false$filename: Путь к файлу или URL для чтения.$use_include_path: (необязательный) Если установлено значениеTRUE, функция будет искать файл в пути подключения (include path).$context: (необязательный) Корректный ресурс контекста, созданный с помощьюstream_context_create().$offset: (необязательный) Указывает, с какой позиции начинать чтение файла. Если$offsetотрицательный, чтение начнётся с конца файла.$maxlen: (необязательный) Указывает максимальное количество байт для чтения.
Как работает file_get_contents
Функция file_get_contents() принимает путь к файлу или URL в качестве первого аргумента и возвращает всё содержимое файла в виде одной строки. Поскольку она загружает всё в память сразу, это самый простой способ прочитать файл целиком — но также неподходящий инструмент для файлов, размер которых превышает доступную память.
Возвращаемое значение — содержимое файла при успехе или false при ошибке. Поскольку пустой файл возвращает пустую строку "" (которая является ложным значением), всегда используйте строгий оператор !== false вместо простой проверки истинности.
Чтение локального файла
Наиболее распространённый вариант использования — чтение небольшого локального файла, например конфигурационного или шаблонного:
$content = file_get_contents('config.txt');
if ($content !== false) {
echo $content;
} else {
echo "Error: could not read the file.";
}file_get_contents() возвращает false при ошибке — например, если файл не существует или у процесса нет прав на чтение — и также генерирует предупреждение PHP. Чтобы подавить предупреждение и обработать ошибку самостоятельно, добавьте перед вызовом оператор подавления ошибок @:
$content = @file_get_contents('missing.txt');
if ($content === false) {
echo "File is unavailable.";
}Чтение части файла с помощью offset и maxlen
Вам не обязательно читать файл целиком. Параметры $offset и $maxlen позволяют прочитать фрагмент, что удобно для просмотра заголовков или очень больших файлов:
// File contains: "Hello, World!"
// Read 5 bytes starting at offset 7
echo file_get_contents('greeting.txt', false, null, 7, 5); // WorldРаспространённый практический приём — чтение только первых нескольких байт для определения типа файла без загрузки всего содержимого в память.
Получение данных с удалённого URL
Когда настройка PHP allow_url_fopen включена, можно передать URL с http:// или https://, и file_get_contents() загрузит тело ответа:
$html = file_get_contents('https://example.com');
if ($html !== false) {
echo substr($html, 0, 100); // first 100 characters
}Это удобно для быстрых скриптов, но для производственных HTTP-запросов — где нужны тайм-ауты, пользовательские заголовки, тела POST-запросов или подробные коды ошибок — расширение cURL является более надёжным выбором.
Работа с JSON API
Частая задача — получение JSON из API и его декодирование в array PHP. Используйте file_get_contents() вместе с json_decode():
$json = file_get_contents('https://api.example.com/data.json');
$data = json_decode($json, true); // true => associative array
echo $data['name'];Отправка заголовков через контекст потока
Для отправки пользовательских HTTP-заголовков, установки тайм-аута или выполнения POST-запроса передайте контекст потока, созданный с помощью stream_context_create(), в качестве третьего аргумента:
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\n",
'content' => json_encode(['key' => 'value']),
'timeout' => 5,
],
]);
$response = file_get_contents('https://api.example.com/submit', false, $context);Преимущества
- Простота: получает содержимое файла целиком в одну строку кода, без необходимости вручную открывать, читать и закрывать дескриптор.
- Скорость для небольших файлов: эффективна для чтения небольших и средних конфигурационных, шаблонных и файлов с данными.
- Универсальность: работает с локальными путями и, при включённом
allow_url_fopen, с удалёнными URL по протоколамhttp/https/ftpчерез единый API.
Ограничения и подводные камни
- Использование памяти: файл загружается в память целиком, поэтому чтение многогигабайтного файла может превысить
memory_limitPHP. Для больших файлов используйте потоковое чтение сfopen()иfread()или построчное чтение сfgets(). - Нет деталей об HTTP-ошибках: при удалённом ответе
404или500вызов возвращаетfalse(или частичное содержимое) без удобного кода статуса. Используйте расширение cURL, когда нужно проверить статус ответа. allow_url_fopenдолжен быть включён: удалённые URL молча завершатся ошибкой, если эта директиваphp.iniотключена, что характерно для защищённых серверов.- Пустой файл против ошибки: пустой файл возвращает
"", а неfalse— ещё один повод использовать проверку!== false.
Связанные функции
file_put_contents()— аналог для записи; сохраняет строку в файл за один вызов.file()— читает файл в array строк вместо одной строки.readfile()— читает файл и выводит его прямо в выходной буфер (удобно для отдачи файлов на скачивание).fopen()— открывает дескриптор для потокового, инкрементального чтения и записи.
Заключение
file_get_contents() — простая и универсальная функция для чтения содержимого локальных файлов и удалённых URL в строку. Её удобство делает её основным выбором для небольших файлов, конфигурационных данных и быстрых API-запросов. Для очень больших файлов предпочтительнее потоковое чтение с fopen()/fread(); для производственных HTTP-запросов — cURL. При использовании со строгой проверкой !== false возвращаемого значения она остаётся одной из наиболее практичных функций ввода-вывода в PHP.