分享好友 最新动态首页 最新动态分类 切换频道
适用小白成功搭建属于自己的影视TV后台----神马.rar
2024-12-28 08:07
# PSR-7 Message Implementation 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`
最新文章
来宾爱采购平台好不好
爱采购平台出生于百度,增量可观。结合自身专属企业名片、多终端阵地展示、多场景曝光、多线索分发四大权益和运营机制、企业小程序、卖家版app等特色能力,帮助入驻商家增加企业曝光度,提高营销管理效率。同时,爱采购平台开放搜索阿拉丁
获取 Android 15
您可以通过以下任一方式获取 Android 15:在 Google Pixel 设备上获取 Android 15设置 Android 模拟器获取通用系统映像 (GSI)如果您使用的是受支持的 Pixel 设备,则可以查看并更新 Android 版本,以通过无线下载的方式获取 Android 15。在
她高调求复婚,却惨遭打脸 | 最破坏亲密关系的行为,它排第一
要说最近最狗血的场景是什么?那必须是婚恋综艺《春日迟迟再出发》里「前妻追夫求复合」的大场面了!前夫李雅男,为了打开自己开启新生活,来参加了这档离异男女婚恋交友节目。前妻蒋菲菲,因为不愿老公落入别的女人手中,直接跑到了节目现
百度推广账户结构优化,解锁广告效果提升之道
百度推广优化账户结构,关键在于科学划分广告单元,精准定位关键词,合理分配预算。通过精细化管理,实现广告投放的精准化、高效化,有效提升广告效果。具体策略包括:细化账户结构,优化关键词策略,合理分配预算,定期分析数据,持续优化
宏观政策组合效应持续释放 11月份经济运行延续回升态势
转自:证券日报    本报记者 孟珂    “在宏观政策组合效应持续释放的作用下,11月份,生产较快增长,需求继续扩大,就业物价总体稳定,楼市和股市趋于活跃,市场预期持续改善,新质生产力稳步发展,经济运行延续回升态势。”12月1
拼多多商品参考价怎么填?产品价格公式
在上传拼多多产品的时候,我们需要设置产品的价格,这个价格是产品的销售价格,除了这个之外,我们还要填写参考价,这其实也是一个很重要的属性,这一栏该怎么填呢?一、商品参考价怎么填?1、首先大家需求理解什么是拼多多商品参考价。拼多
绝区零角色图鉴大全:游戏人物设定详解及角色关系梳理
在充满未知与冒险的虚拟世界中,一款名为“绝区零”的游戏以其独特的故事背景和丰富多样的角色设定吸引了无数玩家的目光。今天,我们将一同走进这个神秘的世界,梳理其中的角色图鉴,详解游戏人物的设定以及他们之间的纷繁复杂的关系。一引
漏洞分析丨使用Dirty COW获取T-Mobile LG V20机型Root权限
本篇文章主要是分享通过使用某种技术来获得T-Mobile LG V20机型ROOT权限,文章来自国外网站某网友的分享,经FB小编secist 编译,转载请标注来自FreeBuf。自 LG 最新的旗舰手机 LG V20 发布以来,已经有一个多月了
微客外链:一键跳转微信加好友私域引流神器
微信作为一款全球最大的社交媒体平台,为人们提供了便捷的交流方式。其中,添加好友功能则成为了人们与他人建立联系的最重要的步骤之一。而如今,随着技术的不断进步,一键跳转微信加好友成为了私域引流的新趋势。一键跳转微信加好友,顾名
数据结构——利用堆进行对数组的排序
今天文章的内容是关于我们如何利用堆的特性对我们的数组进行排序,还有就是我们的TopK的问题,这次我们放在的是文件种,我们放入一亿个数字,然后我们取出一亿个数字中最大的十个数,利用上章堆的问题进行解
相关文章
推荐文章
发表评论
0评