W3docs

Функция 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_limit PHP. Для больших файлов используйте потоковое чтение с 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.

Практика

Практика
Что описывает функцию 'file_get_contents()' в PHP?
Что описывает функцию 'file_get_contents()' в PHP?
Was this page helpful?