deminy/streamer

此包已被废弃且不再维护。没有建议的替代包。

PHP 流的面向对象 API

0.0.1 2014-12-08 22:31 UTC

This package is auto-updated.

Last update: 2020-08-15 23:25:31 UTC


README

Streamer 是一个 PHP 流的面向对象 API。

为什么我应该使用流?

流是从一个容器到另一个容器的字节流。你已经在 PHP 中大量使用流,例如每次将文件加载到内存中(例如使用 file_get_contents())。你应该在以下情况下显式使用流:

  • 你需要从容器访问数据,但不知道这个容器的尺寸(例如从 STDIN 读取,或者使用流式传输的 web 服务)
  • 在你完成整个传输之前,你需要开始从容器中处理数据(例如在文件全部载入内存之前开始压缩文件)
  • 你需要节省时间和内存

什么是 Streamer?

PHP 有一个非常完善的流 API;不幸的是,它大部分使用函数来执行流操作(除了包装器——想想看)。Streamer 是一个专注于提供面向对象 API 的通用库,仅此而已。

安装

Streamer 发布在 packagist.org,因此你可以将其添加到 composer.json 文件中以方便安装

composer require deminy/streamer

{
    "require": {
        "deminy/streamer": "@dev"
    }
}

示例

<?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 最初由 fzaninotto 开发,受到了其他 Stream 类实现的重度启发