Одной из этих важных функций PHP является чтение содержимого файла в виде строки, что может быть достигнуто с помощью функции file_get_contents() . Давайте разберемся, как пользоваться этой важной функции PHP.

В этой статье мы рассмотрим такие вопросы:

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

Функция file_get_contents() — встроенная функция PHP, используемая для чтения данных из файла, URL-а или потока HTTP или FTP. При вызове функция считывает весь файл в строку. Для этой функции не требуется явных операций открытия или закрытия файла, которые обычно нужны другим традиционным методам обработки файлов в PHP.

Из документации мы знаем, что эта функция может принимать такие параметры:

где:

  • $path - указывает файл для чтения.
  • $include_path (необязательно) - указывает, должна ли функция искать файл в include_path (по умолчанию false).
  • $context (необязательно) - указывает контекст дескриптора файла. Контекст — это набор параметров, которые могут изменять поведение потока. Чтобы пропустить параметр, в него передают значение null, когда особый контекст не нужен.
  • $offset(необязательно) - указывает, с какой части файла начать чтение.  Отрицательное значение смещения будет отсчитываться с конца потока. Поиск смещения (offset) не поддерживается при работе с удалёнными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но результат будет непредсказуемым, так как функция работает на буферизованном потоке.
  • $length (необязательно) - указывает максимальную длину считываемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла.

Возвращает функция либо строку, либо false. Этим функция file_get_contents() похожа на функцию file(), за исключением того, что функция file_get_contents() еще может возвращать содержимое файла в строке длиной $length байтов со смещения $offset. В случае неудачи функция file_get_contents() вернёт false.

Вызов функции file_get_contents() наиболее предпочтителен, когда требуется получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в памяти (memory mapping), если операционная система её поддерживает.

Чтение локального файла

Предположим, у вас есть текстовый файл с именем example.txt . Вы можете прочитать этот файл и распечатать его содержимое, используя следующий код:

В этом примере функция file_get_contents() считывает содержимое example.txt и сохраняет его как строку в переменной $file_content. Затем оператор echo печатает эту строку.

Например, для файла, содержащего стихотворение Т.Г. Шевченко, весь контент будет выведен в одну строку:

Вывод содержимого файла с помощью функции file_get_contents():

Если нам нужна часть файла, то нужно указать параметры $offset (125) и $length(46) в виде количества символов:

В результате получим только одну строку из стихотворения: "Хрущі над вишнями гудуть".

В этом случае четвертый параметр $offset определяет смещение. Он также может быть в виде отрицательного значения. Тогда смещение считается от конца строки.

Пятым параметром вы указываете длину  $length возвращаемой строки. Например, так мы можем получит начало файла:

Обработка ошибок

Поскольку файл, содержимое которого вы пытаетесь получить с помощью функции file_get_contents(), может быть перемещен или удален с сервера, либо он вообще там никогда не существовал под тем именем, которое вы указали, необходимо проверить наличие этого файла по указанному пути, а затем уже считывать его. Это можно сделать и с помощью самой функции file_get_contents(), т.к. она возвращает false в случае ошибки.

Кроме того, вы можете использовать функцию file_exists() , чтобы проверить, существует ли файл, прежде чем пытаться его прочитать:

Чтение файла на сервере

Функция file_get_contents() также может считывать содержимое из URL. Вот пример того, как использовать ее для получения HTML-кода веб-страницы:

Тут также мы увидим вывод содержимого файла в виде строки.

Примечание: Если открывается URI, который содержит спецсимволы наподобие пробела, нужно закодировать URI функцией urlencode()

Получение IP-адреса

Интересно, что иногда вы можете использовать функцию file_get_contents() даже для тех целей, о которых, возможно, не подозревали.

В следующем примере запрос отправляется на api.ipify.org, который должен вернуть внешний IP-адрес компьютера, на котором выполняется сценарий.

Попробуйте сами.

Чтение файла в json-формате

Самым популярным вариантом чтения данных является использование файла в json-формате. Для примера мы загрузим список дел с популярного сервиса JSONPlaceholder.

В примере мы видим использование функции print_r(), которая выведен на экран содержимое json-файла в виде массива, либо содержимое каждого вложенного массива, в который превратились данные загружаемого json-файла.

Для того чтобы вывод информации был оформлен красиво, вы можете использовать такие css-стили:

В случае, если мы попытаемся указать, с какого символа мы хотим начать считывание файла и ограничение по количеству символов, как в случае с получением контента из локального файла в виде

мы увидим такую ошибку:

Warning: file_get_contents(): Stream does not support seeking in index.php on line 2.

В случае с получением информации в ограниченном количестве с сервера JSONPlaceholder мы можем изменить ссылку-запрос на загрузку файла со списком деле только одного пользователя - https://jsonplaceholder.typicode.com/todos/?userId=1.

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

Загрузка файлов с помощью функции file_get_contents()

Еще одна особенность функции file_get_contents() - это то, что ее можно использовать для загрузки файлов из удаленных источников. Это особенно полезно, когда вы хотите сохранить файлы на своем сервере или манипулировать ими перед сохранением, например, сделать из загруженного изображения размытую картинку.

Допустим, мы хотим загрузить фото с популярного ресурса unsplash.com.

Важно, чтобы папка images уже была на вашем сервере, иначе вы получите ошибку вида:

Warning: file_put_contents(images/image_file.png): Failed to open stream: No such file or directory in index.php on line 4.

Параметры контекста

Третий параметр file_get_contents() позволяет вам указать контекст для запроса. Этот контекст может содержать различные параметры, такие как заголовки, данные аутентификации и многое другое. Например, вы можете установить тайм-аут для запроса с помощью параметра timeout:

Для получения контекста вам понадобится функция  stream_context_create().

Если вы используете третий параметр $context, вы также можете указать дополнительные параметры в виде имени пользователя и пароля, например, а также сформировать нужные вам заголовки.

В следующем примере выполняется запрос POST к quotes.toscrape.com/login и возвращается результат. В этом запросе передаются пользовательские данные, чтобы сохранить представление для вошедших в систему пользователей.

Еще один пример также связан с JSONPlaceholder. Здесь мы меняем данные для первого поста с помощью метода PUT:

В результате увидим строку:

Заключение

Функция file_get_contents() в PHP обеспечивает простой и эффективный способ чтения содержимого файла в строку. Ее возможности распространяются на чтение локальных файлов и содержимого по указанному URL, что делает ее универсальной функцией в наборе инструментов обработки файлов PHP.

Автор: Alex

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *