file get contents php пример
file_get_contents
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
file_get_contents — Читает содержимое файла в строку
Описание
Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.
Список параметров
Имя читаемого файла.
Смещение, с которого начнётся чтение оригинального потока. Отрицательное значение смещения будет отсчитываться с конца потока.
Поиск смещения ( offset ) не поддерживается при работе с удалёнными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но результат будет непредсказуемым, так как функция работает на буферизованном потоке.
Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.
Возвращаемые значения
Функция возвращает прочтённые данные или false в случае возникновения ошибки.
Ошибки
Список изменений
Примеры
Пример #1 Получить и вывести исходный код домашней страницы сайта
Пример #2 Поиск файлов в include_path
Пример #3 Чтение секции файла
Результатом выполнения данного примера будет что-то подобное:
Пример #4 Использование потоковых контекстов
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
Чтение файла. PHP функция file_get_contents
Чтение файла. PHP функция file_get_contents
file_get_contents
file_get_contents — Читает все содержимое файла и выдает результат в виде строки
Прим. переводчика. На базе этой функции часто строятся простейшие HTML-парсеры. Т.е. указывается URL нужной HTML страницы.
Функция возвращает страницу в виде строки, которую по HTML-тегам обрабатывает парсер.
Описание
Эта функция аналогична функции file(). Отличие заключается в том, что функция file_get_contents() возвращает файл в виде строки, которая начинается с заданного смещения (offset) и ограничивается максимальной длиной maxlen, задаваемой в байтах. В случае ошибки функция file_get_contents() возвращает FALSE.
file_get_contents() это лучший способ получать содержимое файла в виде строки. Для повышения быстродействия функция, если это позволяет делать операционная система, использует технологию memory mapping techniques.
Примечание: Если Вы открываете URI, содержащий специальные символы (например пробелы), Вам надо кодировать URI с помощью функции urlencode().
Примечание: Значение по умолчанию параметра maxlen не равно -1. По умолчанию значение этого параметра равно внутренней константе PHP, которая означает копировать все содержимое файла пока не встретится символ «конец файла». Если Вы хотите получить все содержимое файла, просто не используйте этот параметр.
Параметры
Имя файла, который надо прочитать.
Примечание: До версии PHP 6, этот параметр называется use_include_path, тип данных bool. Как и в PHP 5 параметр FILE_USE_INCLUDE_PATH может использоваться для указания, надо ли выполнять поиск в каталогах include path.
Значение параметра flags может быть представлено как комбинация следующих флагов (с некоторыми ограничениями), объединенных бинарной операцией И (|)
значение | описание |
---|---|
FILE_USE_INCLUDE_PATH | Искать filename в каталогах, описанных в параметре include_path. |
FILE_TEXT | В PHP 6 кодировка файла по умолчанию установлена в UTF-8. Вы можете задать другую кодировку, создав пользовательский контекст (custom context) или используя stream_default_encoding(). Этот флаг не может использоваться с флагом (FILE_BINARY). |
FILE_BINARY | Если этот флаг установлен, то файл будет прочитан в бинарном режиме. Это значение установлено по умолчанию и не может использоваться совместно с флагом FILE_TEXT. |
Ресурс контекста (context resource) создается при помощи функции stream_context_create(). Если Вам не нужен пользовательский контекст (custom context), просто пропустите этот параметр, установив NULL.
Это смещение, с которого должно начаться чтение файла.
Максимальная длина данных, которые надо прочитать. Если значение не задано, файл будет прочитан до конца.
Возвращаемое значение
Функция возвращает прочитанные данные или FALSE в случае ошибки.
Примеры использования file_get_contents
Пример #1 Получение и вывод исходного текста домашней страницы web-сайта
Пример #2 Поиск в каталогах include_path
Пример #3 Чтение части файла
В этом примере результат будет примерно такой:
Пример #4 Использование потокового контекста
История изменения
Версия | Описание |
---|---|
6.0.0 | Параметр use_include_path заменен на flags. |
5.1.0 | Добавлены параметры offset и maxlen. |
5.0.0 | Добавлена поддержка контекста (context). |
Примечания
Примечание: Эта функция может безопасно обрабатывать бинарные данные.
Имя файла может быть задано в виде URL только в том случае, если была включена настройка PHP fopen wrappers. Смотрите документацию к функции fopen(), чтобы узнать как задать имя файла. Для получения подробной информации об обертках (wrapper) смотрите List of Supported Protocols/Wrappers.
При использовании SSL, web-сервер Microsoft IIS нарушает протокол, закрывая соединение без отправки уведомления close_notify. Когда Вы дойдете до конца файла, PHP сообщит об этом как о ошибке «SSL: Fatal Protocol Error». Чтобы справиться с этой ошибкой, надо понизить значение параметра error_reporting до такого уровня, при котором не выводятся предупреждения. Если Вы открываете поток, используя https://, начиная с версии 4.3.7 PHP определит, что на сервере используется проблемный web-сервер IIS и не выведет предупреждение. Если для создания ssl:// сокета Вы используете функцию fsockopen(), то Вы сами должны примять меры для обработки этой ошибки.
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
file_get_contents — Читает содержимое файла в строку
Описание
Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.
Список параметров
Имя читаемого файла.
Начиная с версии PHP 5 можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path.
Смещение, с которого начнется чтение оригинального потока.
Поиск смещения ( offset ) не поддерживается при работе с удаленными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но этот результат является непредсказуемым, так как он работает на буферизованном потоке.
Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.
Возвращаемые значения
Функция возвращает прочтенные данные или FALSE в случае возникновения ошибки.
Ошибки
Примеры
Пример #1 Получить и вывести исходный код домашней страницы вебсайта
Пример #2 Поиск файлов в include_path
Пример #3 Чтение секции файла
Результатом выполнения данного примера будет что-то подобное:
Пример #4 Использование потоковых контекстов
Список изменений
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify. PHP сообщит об этом как «SSL: Fatal Protocol Error» в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится проблемный IIS при открытии потока с помощью обертки https:// и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.
Смотрите также
Получение данных с помощью file_get_contents из файла пример
Разберем варианты использования file_get_contents, как применять данную функцию и обязательно примеры! Начнем с синтаксиса file_get_contents:
Все о получении данных с помощью file_get_contents
Синтаксис file_get_contents
И в этом наше преимущество!
Не будем копировать учебник!
Если вы используете в функции абсолютный путь до файла, то вы получите уже исполненный код файла:
Если вы используете путь на сервере, то получите исходный код файла:
Что возвращает file_get_contents
Как я уже сказал выше – нужно знать, что возвращает та или иная функция:
Если файл не существует, то функция file_get_contents возвратит ошибку типа Warning
При удачном получении данных – возвращает эти данные.
Отключить ошибку «Warning» для file_get_contents
Для того, чтобы забить ошибку типа Warning ставим знак собаки перед file_get_contents
Получить контент с другой страницы с помощью file_get_content
Данные будем получать двумя способами. Через путь на путь на сервере.
И напрямую по адресу. https://dwweb.ru/. /file_get_contents_test_page.php
Вы должны спросить зачем эти манипуляции!?
Для этого нам понадобится тестовая страница
Если вы поленились сходить по ссылке, то вот скрин данной страницы :
Получить контент с другой страницы с помощью file_get_content
Далее выведем скопированный код файла! Обращаю ваше внимание файла, а не страницы. Откроем этот файл в редакторе редакторе
Получить контент с другой страницы с помощью file_get_content
И далее вы можете сравнить результаты полученных данных двумя спсобомаи :
Возьмем выше приведенный пример тестовой страницы.
И выведем полученные данные прямо здесь этим кодом:
Результат вывода данных по абсолютному пути:
Получим и выведем данные с другой страницы с помощью file_get_contents по ссылке из адресной строки и вывод этих данных через echo:
Заголовок
Здесь может быть любой код, который еще не исполнился, этого кода может быть несколько страниц!
И эта страница сделана специально, для иллюстрации работы функций, которые получают данные с другой страницы!
Рассмотрим три. file_get_contents, file, include
Как прочитать большой файл средствами PHP (не грохнув при этом сервак)
PHP разработчикам не так уж часто приходится следить за расходом памяти в своих приложениях. Сам движок PHP неплохо подчищает мусор за нами, да и модель веб-сервера с контекстом исполнения, «умирающим» после выполнения каждого запроса, позволяет даже самому плохому коду не создавать больших долгих проблем.
Однако, в некоторых ситуациях, мы можем столкнуться с проблемами нехватки оперативной памяти — например, пытаясь запустить композер на маленьком VPS, или при открытии большого файла на сервере не богатом ресурсами.
Последняя проблема и будет рассмотрена в этом уроке.
Мерила Успеха
При проведении любых оптимизаций кода, мы всегда должны замерять результаты его выполнения до и после, для того чтобы оценивать эффективность(или пагубность) наших оптимизаций.
Обычно измеряют загрузку CPU и использование оперативной памяти. Часто бывает, что экономия одного, ведёт к увеличенным затратам другого и наоборот.
В асинхронной модели приложения(мультипроцессорные и многопоточные) всегда очень важно следить как за процессором, так и за памятью. В классических приложениях контроль ресурсов становится проблемой лишь при приближении к лимитам сервера.
Измерять использование CPU внутри PHP плохая идея. Лучше использовать какую-либо утилиту, как top из Ubuntu или macOS. Если вы у вас Windows, то можно использовать Linux Subsystem, чтобы иметь доступ к top.
В этом уроке мы будем измерять использование памяти. Мы посмотрим, как память расходуется в традиционных скриптах, а затем применим парочку фишек для оптимизации и сравним результаты. Надеюсь, к концу статьи, читатель получит базовое понимание основных принципов оптимизации расхода памяти при чтении больших объемов данных.
Будем замерять память так:
Эту функцию мы будем использовать в конце каждого скрипта, и сравнивать полученные значения.
Какие есть варианты?
Существует много разных подходов для эффективного чтения данных, но всех их условно можно разделить на две группы: мы либо считываем и сразу же обрабатываем считанную порцию данных(без предварительной загрузки всех данных в память), либо вовсе преобразуем данные в поток, не заморачиваясь над его содержимым.
Давайте представим, что для первого варианта мы хотим читать файл и отдельно обрабатывать каждые 10000 строк. Нужно будет держать по крайней мере 10000 строк в памяти и передавать их в очередь(в какой бы форме она не была реализована).
Для второго сценария, предположим, мы хотим сжать содержимое очень большого ответа API. Нам не важно, что за данные там содержатся, важно вернуть их в сжатой форме.
В обоих случаях нужно считать большие объемы информации. В первом, нам известен формат данных, во втором, формат значения не имеет. Рассмотрим оба варианта.
Чтение Файла Строка За Строкой
Есть много функций для работы с файлами. Давайте напишем с их помощью свой ридер:
Тут мы считываем файл с работами Шекспира. Размер файла около 5.5MB и пиковое использование памяти 12.8MB.
А теперь, давайте воспользуемся генератором:
Файл тот же, а пиковое использование памяти упало до 393KB! Но пока мы не выполняем со считываемыми данными никаких операций, это не имеет практической пользы. Для примера, мы можем разбивать документ на части, если встретим две пустые строки:
Хотя мы разбили документ на 1,216 кусков, мы использовали лишь 459KB памяти. Всё это, благодаря особенности генераторов — объем памяти для их работы равен размеру самой большой итерируемой части. В данном случае, самая большая часть состоит из 101,985 символов.
Генераторы могут применяться и в других ситуациях, но данный пример хорошо демонстрирует производительность при чтении больших файлов. Возможно, генераторы один из лучших вариантов для обработки данных.
Пайпинг между файлами
В ситуациях, когда обработка данных не требуется, мы можем пробрасывать данные из одного файла в другой. Это называется пайпингом( pipe — труба, возможно потому что мы не видим что происходит внутри трубы, но видим что входит и выходит и неё). Это можно сделать с помощью потоковых методов. Но сперва, давайте напишем классический скрипт, который тупо передает данные из одного файла в другой:
Неудивительно, что этот скрипт использует намного больше памяти, чем занимает копируемый файл. Это связано с тем, что он должен читать и хранить содержимое файла в памяти до тех пор пока файл не будет скопирован полностью. Для маленьких файлов в этом нет ничего страшного, но не для больших.
Давайте попробуем стримить(или пайпить) файлы, один в другой:
Код довольно странный. Мы открываем оба файла, первый на чтение, второй на запись. Затем мы копируем первый во второй, после чего закрываем оба файла. Возможно будет сюрпризом, но мы потратили всего 393KB.
Для того чтобы осуществить задуманное этим способом потребовалось 581KB. Теперь попробуем сделать то же самое с помощью потоков.
Потратили немного меньше памяти(400KB) при одинаковом результате. А если б нам не нужно было сохранять картинку в памяти, мы могли бы сразу застримить её в stdout :
Другие потоки
Существуют и другие потоки, в/из которых можно стримить:
Фильтры
Есть еще одна фишка, которую мы можем использовать — это фильтры. Промежуточный вариант, который дает нам немного контроля над потоком, без необходимости детально погружаться в его содержимое. Допустим, мы хотим сжать файл. Можно применить zip extension:
Хороший код, но он потребляет почти 11MB. С фильтрами, получится лучше:
Здесь мы используем php://filter/zlib.deflate который считывает и сжимает входящие данные. Мы можем пайпить сжатые данные в файл, или куда-нибудь еще. Этот код использовал лишь 896KB.
Я знаю что это не совсем тот же формат, что и zip архив. Но задумайтесь, если у нас есть возможность выбрать иной формат сжатия, затратив в 12 раз меньше памяти, стоит ли это делать?
Чтобы распаковать данные, применим другой zip фильтр.
Вот парочка статей, для тех кому хотелось бы поглубже погрузиться в тему потоков: “Understanding Streams in PHP” и“Using PHP Streams Effectively”.
Кастомизация потоков
fopen и file_get_contents имеют ряд предустановленных опций, но мы можем менять их как душе угодно. Чтобы сделать это, нужно создать новый контекст потока:
В этом примере мы пытаемся сделать POST запрос к API. Прописываем несколько заголовков, и обращаемся к API по файловому дескриптору. Существует много других опций для кастомизации, так что не будет лишним ознакомиться с документацией по этому вопросу.
Создание своих протоколов и фильтров
Перед тем как закончить, давайте поговорим о создании кастомных протоколов. Если посмотреть в документацию, то можно увидеть пример:
Написание своей реализации такого тянет на отдельную статью. Но если все же озадачиться и сделать это, то можно будет легко зарегистрировать свою обертку для стримов:
Аналогичным образом, можно создать и кастомные фильтры потока. Пример класса фильтра из доков:
И его также легко зарегистрировать:
Хотя это не самая частая проблема, с которой мы мучаемся, очень легко накосячить при работе с большими файлами. В асинхронных приложениях, вообще очень просто положить весь сервер, если не контролировать использование памяти в своих скриптах
Надеюсь, что этот урок подарил вам несколько новых идей(или освежил их в памяти) и теперь вы сможете работать с большими файлами гораздо эффективнее. Познакомившись с генераторами и потоками( и перестав использовать функции по типу file_get_contents ) можно избавить наши приложения от целого класса ошибок. That seems like a good thing to aim for!