Потоки в PHP

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

В документации php имеется великолепное определение потоков:

Потоки были впервые введены в PHP 4.3.0, как инструмент для работы с файлами, сетевого обмена, сжатия данных и выполнения других операций с помощью одного общего набора функций. Выражаясь простыми понятиями, поток (stream) - это ресурс (resource), который ведет себя, как источник непрерывной последовательности данных. То есть из потока можно последовательно читать данные, равно как и записывать в него. Также возможно перемещаться ( fseek()) в разные позиции внутри потока.

Каждый поток имеет обвертки, котрые являются дополнительным кодом, необходимым для обработки специфичных протоколов и кодировок. PHP предоставляет несколько обверток из коробки, а также пользователи сами могут легко создать и зарегистрировать свои обвертки. Можно даже модифицировать или улучшить поведение обверток, использую контексты и фильтры.

Основы потоков

Поток указывается в виде:

scheme - имя обвертки и target будет извенятся в зависимости от синтаксиса обвертки.

Обвертка по умолчанию это file://, которая обозначает, что постоянно используется доступ к файловой системею. Можно использовать, например, любой из вариантов readfile('/path_to_somefile.txt') или readfile('file:///path_to_somefile.txt'). Результат выполнения последних двух комманд будет одинаковым. Если же мы вместо этого напишем readfile('http://yandex.ru/'), то это укажет php использовать обвертку HTTP-потока.

Как я уже говорил, php предоставляет несколько обверток, протоколов и фильтров из коробки. Чтобы узнать какие обвертки установлены на вашем компьютере выполните код:

Например у меня вот такой вывод:

Помоему, довольно неплохой набор. Не правда ли?

Кроме того можно использовать потоки сторонних разработчиков, например Amazon S3? MS Excel, Google Storage, Dropbox,Twitter

Обвертка php://

PHP имеет свою собственную обвертку для получения доступа к потокам вводв/вывода языка. Основные обвертки php://stdin, php://stdout и php://stderr для получения доступа к ресурсам ввода/вывода по умолчанию. Кроме того, есть php://stdin - это поток только для чтения, для получения прямого доступа к данным POST запроса.

В php 5.1 введены потоки php://memory и php://temp которые предназначены для чтения и записи временной информации. Как следует из названия информация храниться в памяти или во временном файле, управляемом системой, соответственно.

Также, есть мета-обвертка, разработанная для применения фильтров, при открытии потоков функциями типа readfile(), file_get_contents(),stream_get_contents()

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

Результат применения может быть как очень прозрачен, так и быть очень мощным в плане использования.

Контексты потоков

Контекст это поткозависимый набор параметров, который может модифицировать и улучшить поведение ваших обверток потоков. Наиболее часто используемый контекст - модификация HTTP-обвертки. Это позволяет не использовать cURL запросы для простых операций.

Сначала в примере определяется массив параметров в формате \$array['wrapper']['option_name'] (Допустимый набор опций изменяется в зависимости от обвертки - wrapper). Затем вызов stream_context_get_default() возвращает контекст по умолчению и применяет указанный набор опций. Далее readfile использует эти настройки, чтобы получить контент.

Кроме, того можно не модифицировать контекст по умолчанию, а создать новый.

На этом мое краткое введение в потоки закончено:)

И пара слов на злобу дня. Только сделаешь бампер на своей машине, как найдется умник в потоке... В общем бампер снова ремонтировать:( После нескольких таких "удачных" ремонтов нашел вот этот сайт http://landavto.ru/zashita-bampera. Оказывается можно довольно недорого установить на бампер дополнительныю защиту, что позволит избежать ремонт бампера во многих случаях.

Нет комментариев.
Добавить комментарий
Вам необходимо включить показ изображений в браузере для того чтобы увидеть код

Дайте нам знать, что вы - живой человек. Для нас это важно!
Кликните, если плохо видно

Прежде чем высказать свое мнение, прочитайте пожалуйста: правила

Рейтинг@Mail.ru