php string to stream

stream_get_contents

stream_get_contents — Читает оставшуюся часть потока в строку

Описание

Список параметров

Ресурс потока (например, полученный при помощи функции fopen() )

Перейти к указанному смещению перед чтением. Если это число отрицательное, то переход не произойдёт и чтение начнётся с текущей позиции.

Возвращаемые значения

Возвращает строку или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования stream_get_contents()

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

User Contributed Notes 5 notes

In that case when stream_get_contents/fread/fgets or other stream reading functions block indefinitely your script because they don’t reached the limit of bytes to read use the socket_get_meta_data function to figure out the number of the bytes to read. It returns an array that contains a key named ‘unread_bytes’ and then pass that number to your favourite stream reading functions second parameter to read from the stream.

Maybe a good workaround to use the stream_select function, and set the socket to non-blocking mode with the use of stream_set_blocking($stream, 0). In this case the socket reading functions work properly.

It is important to know that stream_get_contents behaves differently with different versions of PHP. Consider the following

/**
*
* ‘file’ content
*
* PHP 5.1.6:
* 67895
*
* PHP 5.2.17:
* 123456789
*
*/
?>

As a result, stream_get_contents() affects file position in 5.1, and do not affect file position in 5.2 or better.

Источник

Creating streams from strings in PHP

I’m in the process of writing an API that relies on (file-)streams to be passed around.

There are situations where a string instead needs to be used, and for these purposes the data: stream wrapper is used. Initially I thought it was only possible to encode the actual string in base64, which I didn’t like because of the added footprint.

Quickly checking out the rfc, it turns out that ‘;base64’ can be omitted to just pass along the raw data, which makes a lot more sense in the context of PHP.

Thankfully, PHP gladly supports it:

Update June 23th, 2013

Just in case anyone stumbles upon this, I would no longer recommend using the data uri for this purpose.

This is how you use it:

A bit more info can be found on php.net.

Web mentions

Comments

My favorite usage of the data: wrapper is for raw uploaded csv data. If you let user’s cut-n-paste a csv for upload you can use the data: wrapper to fopen the POST data then fgetcsv() on it to save yourself from parsing it manually.

Great tip, thanks! I might use this to simplify some code I have that works with either IPC pipes or strings.

@Josh: Thanks for an awesome example of how to use it.

aparimana • Jun 23, 2013

I should really update this post, but I would _not_ recommend using the data:// url. Use php://memory and php://temp instead!

Nicholas Ruunu • Apr 23, 2017

Is it possible to write initial data to a read only stream with php://temp?

Markus • Nov 25, 2013

instead of base64_encode() in php which consumes a lot of php memory you should use

stream_filter_append($fh, ‘convert.base64-encode’);
which is not limited by php-memory limits AFAIK

Jasmine Hegman • Jul 28, 2015

r+ actually works too. Judging from the documentation is looks like the only difference is that w+ creates a new file if it doesn’t already exist, but that’s not really relevant here.

Jasmine Hegman • Jul 30, 2015

Oh you are so right, I don’t know what I was thinking! I guess my brain decided to pretend the + symbol was meaningless. :3

linoge • Jun 04, 2016

Thank you very much for the article, I was looking exactly for this, and it’s such a nice thing that you added the update c;

Matt Styles • Jun 24, 2016

Beautiful, thank you!

Hugo Franco de Campos • Nov 30, 2016

Is there any concern about keep large strings in memory using fopen? I’m sending a large csv string to a file storage and I have no idea if I should use memory, temp or anything else.

rinogo • Sep 02, 2017

Thanks for your short examples on this, especially for the 2013 update! Exactly what I was looking for.

Источник

Введение в PHP Потоки

php string to stream. Смотреть фото php string to stream. Смотреть картинку php string to stream. Картинка про php string to stream. Фото php string to stream

Несмотря на то, что PHP 4.3 вышел давным-давно, многие PHP-программисты имеют весьма отдаленное представление о потоках в PHP, и продолжают использовать CURL везде, хотя в PHP для этого существует более удобная альтернатива в виде контекста потоков (Stream Context).

Следующие виды потоков существуют в PHP:

Что общего есть во всех этих ресурсах? Все они могут быть прочитаны и записаны, т.е. к ним ко всем могут быть применены операции чтения и записи. Сила потоков PHP как раз и заключается в том, что вы можете получить доступ ко всем этим ресурсам, используя один и тот же набор функций. Это очень удобно. Также, если вдруг возникнет такая необходимость, Вы можете написать свою собственную реализацию обработчика потоков «stream wrapper». Помимо чтения и записи, потоки в PHP также позволяет выполнять другие операции, такие как переименование и удаление.

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

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

Часто возникает необходимость указания дополнительных параметров при http-запросе. Контексты потоков решают эту проблему, позволяя указать дополнительные параметры. У многих функций, поддерживающих работу с потоками, есть необязательный параметр контекста потока. Давайте посмотрим на функцию file_get_contents():

Как видно, третьим параметром передается контекст потока. Контексты создаются с помощью функции stream_context_create(), которая принимает массив и возвращает ресурс контекста.

array(
‘method’ => «GET»,
‘header’ => «Accept-language: en\r\n».
«Cookie: foo = bar\r\n»
)
);

Таким образом, сегодня мы узнали, что такое потоки и контексты потоков в PHP, рассмотрели примеры их использования, а в следующих статьях мы поговорим о метаданных потока и создадим свой собственный обработчик.

php string to stream. Смотреть фото php string to stream. Смотреть картинку php string to stream. Картинка про php string to stream. Фото php string to stream

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Комментарии ( 0 ):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.

Источник

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

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