fzaninotto / streamer
PHP 流的对象化 API
0.0.1
2012-07-02 21:44 UTC
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2021-12-23 22:41:33 UTC
README
Streamer 是一个 PHP 流的对象化 API。
为什么我应该使用流?
流是从一个容器到另一个容器的字节流。您已经在 PHP 中大量使用了流,例如每次将文件加载到内存中(file_get_contents()
)。当以下情况发生时,您应该显式地使用流:
- 您需要从容器中访问数据,但不知道该容器的尺寸(例如从 STDIN 读取,或使用流式的 Web 服务)
- 您需要在整个传输完成之前开始处理容器中的数据(例如在文件全部加载到内存之前开始压缩文件)
- 您需要节省时间和内存
什么是 Streamer?
PHP 有一个非常详细的流 API;不幸的是,它使用函数来进行大多数流操作(除了包装器——想想看)。Streamer 是一个专注于提供流的对象化 API 的通用库,仅此而已。
安装
Streamer 发布在 packagist.org,因此您可以将其添加到您的 composer.json
文件中以方便安装
composer require fzaninotto/Streamer
或
{ "require": { "fzaninotto/Streamer": "0.0.1" } }
示例
<?php use Streamer\Stream, Streamer\FileStream, Streamer\NetworkStream; // basic usage $stream = new Stream(fopen('smiley.png', 'r')); $image = ''; while (!$stream->isEOF()) { $image .= $stream->read(); } // pipe dreams! $stream1 = new Stream(fopen('smiley.png', 'r')); $stream2 = new Stream(fopen('tmp.png', 'w')); // copy the contents from the first stream to the second one $stream1->pipe($stream2); // factory $fileStream = FileStream::create('smiley.png', 'r'); print_r($fileStream); $networkStream = NetworkStream::create('tcp://www.google.com:80'); print_r($networkStream);
致谢
Streamer 受其他流类实现的重度启发