分享好友 最新动态首页 最新动态分类 切换频道
2024最新麻豆MDYS14源码苹果CMS系统 附搭建教程
2024-12-26 15:44
# PSR-7 Message Implementation

2024最新麻豆MDYS14源码苹果CMS系统 附搭建教程

This repository contains a full [PSR-7](http://www.php-fig.org/psr/psr-7/) message implementation, several stream decorators, and some helpful functionality like query string parsing. [![Build Status](https://travis-ci.org/guzzle/psr7.svg?branch=master)](https://travis-ci.org/guzzle/psr7) # Stream implementation This package comes with a number of stream implementations and stream decorators. ## AppendStream `GuzzleHttpPsr7AppendStream` Reads from multiple streams, one after the other. ```php use GuzzleHttpPsr7; $a = Psr7stream_for('abc, '); $b = Psr7stream_for('123.'); $composed = new Psr7AppendStream([$a, $b]); $composed->addStream(Psr7stream_for(' Above all listen to me')); echo $composed; // abc, 123. Above all listen to me. ``` ## BufferStream `GuzzleHttpPsr7BufferStream` Provides a buffer stream that can be written to fill a buffer, and read from to remove bytes from the buffer. This stream returns a "hwm" metadata value that tells upstream consumers what the configured high water mark of the stream is, or the maximum preferred size of the buffer. ```php use GuzzleHttpPsr7; // When more than 1024 bytes are in the buffer, it will begin returning // false to writes. This is an indication that writers should slow down. $buffer = new Psr7BufferStream(1024); ``` ## CachingStream The CachingStream is used to allow seeking over previously read bytes on non-seekable streams. This can be useful when transferring a non-seekable entity body fails due to needing to rewind the stream (for example, resulting from a redirect). Data that is read from the remote stream will be buffered in a PHP temp stream so that previously read bytes are cached first in memory, then on disk. ```php use GuzzleHttpPsr7; $original = Psr7stream_for(fopen('http://www.google.com', 'r')); $stream = new Psr7CachingStream($original); $stream->read(1024); echo $stream->tell(); // 1024 $stream->seek(0); echo $stream->tell(); // 0 ``` ## DroppingStream `GuzzleHttpPsr7DroppingStream` Stream decorator that begins dropping data once the size of the underlying stream becomes too full. ```php use GuzzleHttpPsr7; // Create an empty stream $stream = Psr7stream_for(); // Start dropping data when the stream has more than 10 bytes $dropping = new Psr7DroppingStream($stream, 10); $dropping->write('01234567890123456789'); echo $stream; // 0123456789 ``` ## FnStream `GuzzleHttpPsr7FnStream` Compose stream implementations based on a hash of functions. Allows for easy testing and extension of a provided stream without needing to create a concrete class for a simple extension point. ```php use GuzzleHttpPsr7; $stream = Psr7stream_for('hi'); $fnStream = Psr7FnStream::decorate($stream, [ 'rewind' => function () use ($stream) { echo 'About to rewind - '; $stream->rewind(); echo 'rewound!'; } ]); $fnStream->rewind(); // Outputs: About to rewind - rewound! ``` ## InflateStream `GuzzleHttpPsr7InflateStream` Uses PHP's zlib.inflate filter to inflate deflate or gzipped content. This stream decorator skips the first 10 bytes of the given stream to remove the gzip header, converts the provided stream to a PHP stream resource, then appends the zlib.inflate filter. The stream is then converted back to a Guzzle stream resource to be used as a Guzzle stream. ## LazyOpenStream `GuzzleHttpPsr7LazyOpenStream` Lazily reads or writes to a file that is opened only after an IO operation take place on the stream. ```php use GuzzleHttpPsr7; $stream = new Psr7LazyOpenStream('/path/to/file', 'r'); // The file has not yet been opened... echo $stream->read(10); // The file is opened and read from only when needed. ``` ## LimitStream `GuzzleHttpPsr7LimitStream` LimitStream can be used to read a subset or slice of an existing stream object. This can be useful for breaking a large file into smaller pieces to be sent in chunks (e.g. Amazon S3's multipart upload API). ```php use GuzzleHttpPsr7; $original = Psr7stream_for(fopen('/tmp/test.txt', 'r+')); echo $original->getSize(); // >>> 1048576 // Limit the size of the body to 1024 bytes and start reading from byte 2048 $stream = new Psr7LimitStream($original, 1024, 2048); echo $stream->getSize(); // >>> 1024 echo $stream->tell(); // >>> 0 ``` ## MultipartStream `GuzzleHttpPsr7MultipartStream` Stream that when read returns bytes for a streaming multipart or multipart/form-data stream. ## NoSeekStream `GuzzleHttpPsr7NoSeekStream` NoSeekStream wraps a stream and does not allow seeking. ```php use GuzzleHttpPsr7; $original = Psr7stream_for('foo'); $noSeek = new Psr7NoSeekStream($original); echo $noSeek->read(3); // foo var_export($noSeek->isSeekable()); // false $noSeek->seek(0); var_export($noSeek->read(3)); // NULL ``` ## PumpStream `GuzzleHttpPsr7PumpStream` Provides a read only stream that pumps data from a PHP callable. When invoking the provided callable, the PumpStream will pass the amount of data requested to read to the callable. The callable can choose to ignore this value and return fewer or more bytes than requested. Any extra data returned by the provided callable is buffered internally until drained using the read() function of the PumpStream. The provided callable MUST return false when there is no more data to read. ## Implementing stream decorators Creating a stream decorator is very easy thanks to the `GuzzleHttpPsr7StreamDecoratorTrait`. This trait provides methods that implement `PsrHttpMessageStreamInterface` by proxying to an underlying stream. Just `use` the `StreamDecoratorTrait` and implement your custom methods. For example, let's say we wanted to call a specific function each time the last byte is read from a stream. This could be implemented by overriding the `read()` method. ```php use PsrHttpMessageStreamInterface; use GuzzleHttpPsr7StreamDecoratorTrait; class EofCallbackStream implements StreamInterface { use StreamDecoratorTrait; private $callback; public function __construct(StreamInterface $stream, callable $cb) { $this->stream = $stream; $this->callback = $cb; } public function read($length) { $result = $this->stream->read($length); // Invoke the callback when EOF is hit. if ($this->eof()) { call_user_func($this->callback); } return $result; } } ``` This decorator could be added to any existing stream and used like so: ```php use GuzzleHttpPsr7; $original = Psr7stream_for('foo'); $eofStream = new EofCallbackStream($original, function () { echo 'EOF!'; }); $eofStream->read(2); $eofStream->read(1); // echoes "EOF!" $eofStream->seek(0); $eofStream->read(3); // echoes "EOF!" ``` ## PHP StreamWrapper You can use the `GuzzleHttpPsr7StreamWrapper` class if you need to use a PSR-7 stream as a PHP stream resource. Use the `GuzzleHttpPsr7StreamWrapper::getResource()` method to create a PHP stream from a PSR-7 stream. ```php use GuzzleHttpPsr7StreamWrapper; $stream = GuzzleHttpPsr7stream_for('hello!'); $resource = StreamWrapper::getResource($stream); echo fread($resource, 6); // outputs hello! ``` # Function API There are various functions available under the `GuzzleHttpPsr7` namespace. ## `function str` `function str(MessageInterface $message)` Returns the string representation of an HTTP message. ```php $request = new GuzzleHttpPsr7Request('GET', 'http://example.com'); echo GuzzleHttpPsr7str($request); ``` ## `function uri_for` `function uri_for($uri)` This function accepts a string or `PsrHttpMessageUriInterface` and returns a UriInterface for the given value. If the value is already a `UriInterface`, it is returned as-is. ```php $uri = GuzzleHttpPsr7or('http://example.com'); assert($uri === GuzzleHttpPsr7or($uri)); ``` ## `function stream_for`
最新文章
DSP解析及适合独立站卖家的优质DSP平台推荐——收藏必备!
引流对于独立站至关重要,因为只有成功引入流量,独立站才有机会实现转化并获取订单。但随着流量成本的逐渐攀升以及推广平台的多样化,独立站的推广任务变得越来越复杂。选择哪个推广平台、如何降低成本,成为了独立站卖家面临的一大难题。
8个好用的网盘搜索引擎
如今,网盘已成为我们在网络中必备的资源分享和储存工具。市场上各大网盘平台拥有庞大的用户群体和丰富的资源库,可见其在市场上的占有率越来越大。然而,尽管资源再丰富,但大多数网盘平台并不允许用户在库中搜索资源并直接下载,而是需要
AI绘画中的城市叫什么
AI绘画中的城市叫什么AI绘画中的城市没有统一的名称。AI绘画是指利用人工智能技术进行绘画创作,通过计算机算法模拟人类艺术创作的过程,以生成具有艺术价值的图像作品。城市作为主题之一,可以被AI绘画创作所表达和展现。AI绘画中的城市创
2025计算器可以带进考研考场吗
作为即将迎来2025年考研的研究生,计算器是考试中不可或缺的工具之一。合理使用计算器可以帮助你提高答题效率,减少出错概率。下面分享一些关于2025考研计算器的使用方法,希望对大家有所帮助。在考试中,计算器的基本功能包括加减乘除、开
AIGC数字人克隆:科技与艺术的创新融合
**AIGC数字人克隆:科技与艺术的创新融合**在科技日新月异的今天,数字技术的飞速发展正在以前所未有的方式改变着我们的生活。其中,AIGC(Artificial Intelligence Generated Content,人工智能生成内容)数字人克隆技术作为科技与艺术融
AI辅助撰写全方位产品介绍文案攻略:解决用户搜索的所有相关问题
1. 欢迎体验【智能助手 Pro】,一款颠覆传统的智能设备助您轻松管理日常生活。2. 【核心功能】自动识别并分析客户需求,提供个性化服务,让生活更便捷。3. 【强大性能】采用,快速响应,精准实行,让操作更流畅。4. 【外观设计】简约时,轻
2024新奥资料免费公开,实地验证数据设计方案_交互版 18.414
2024年,新奥资料免费公开项目正式启动,旨在为全球科研工作者和数据爱好者提供一个开放、透明、可访问的资料共享平台。随着互联网技术的飞速发展,数据共享和信息交流变得越来越重要。新奥资料免费公开项目正是基于这一理念,通过提供高质
3. 清理浏览器缓存和cookies
现在很多设备和平台会出现“禁止观看视频”的设置,导致我们在观看视频时遇到无法播放的情况。这种情况通常发生在视频播放限制或者浏览器设置的过程中。若遇到这种情况,用户通常希望找到解除限制的方法。本文将详细介绍如何解除“禁止观看
CRM网页版是什么?
网页版是什么?CRM网页版是指基于网页浏览器的客户关系管理系统。它的核心特点包括:1、无需安装客户端软件,用户只需通过浏览器即可访问系统;2、跨平台兼容性强,支持不同操作系统和设备;3、实时数据更新和访问,方便团队协作和信息共享
AI头像制作新趋势:江苏技师学院夺冠选手也在用的个性化头像解决方案!
近期,江苏省淮海技师学院在全国人工智能应用技术技能大赛上斩获佳绩,尤其在人工智能视觉技术应用方面展现出色。这样的成就无疑让我们看到,将AI技术融合到日常生活中的重要性。在这个数字化时代,个性化的动漫头像成为了许多年轻人的选择
相关文章
推荐文章
发表评论
0评