fzaninotto/streamer

PHP流的对象化API

0.0.1 2012-07-02 21:44 UTC

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深受其他Stream类实现的影响