AWS SDK for PHP 버전 3의 스트림 - AWS SDK for PHP

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SDK for PHP 버전 3의 스트림

PSR-7 HTTP 메시지 표준 통합의 일부로, AWS SDK for PHP는 PSR-7 StreamInterface를 내부적으로 PHP 스트림에 대한 추상화로 사용합니다. S3: :PutObject 명령Body 매개 변수와 같이 입력 필드가 블롭으로 정의된 모든 명령은 문자열, PHP 스트림 리소스 또는 Psr\Http\Message\StreamInterface 인스턴스로 해결할 수 있습니다.

주의

SDK는 명령에 입력 파라미터로 제공된 모든 원시 PHP 스트림 리소스의 소유권을 갖습니다. 스트림은 사용자를 대신하여 사용되고 닫힙니다.

SDK 작업과 코드 간에 스트림을 공유해야 하는 경우 스트림을 명령 파라미터로 포함시키기 전에 GuzzleHttp\Psr7\Stream의 인스턴스 안에 래핑합니다. SDK는 스트림을 사용하므로, 코드는 스트림 내부 커서의 이동을 고려해야 합니다. Guzzle 스트림은 PHP의 가비지 수집기에서 삭제될 때 기본 스트림 리소스의 fclose를 호출하므로, 스트림을 직접 닫을 필요가 없습니다.

스트림 데코레이터

Guzzle은 SDK와 Guzzle이 명령에 입력 파라미터로 제공된 스트리밍 리소스와 상호 작용하는 방식을 제어하는 데 사용할 수 있는 여러 개의 스트림 데코레이터를 제공합니다. 이러한 데코레이터는 핸들러가 지정된 스트림에서 읽고 검색하는 방법을 수정할 수 있습니다. 다음은 부분적인 목록입니다. 자세한 내용은 GuzzleHttpPsr7 리포지토리에서 확인할 수 있습니다.

AppendStream

GuzzleHttp\Psr7\AppendStream

여러 스트림에서 하나씩 차례로 읽습니다.

use GuzzleHttp\Psr7; $a = Psr7\stream_for('abc, '); $b = Psr7\stream_for('123.'); $composed = new Psr7\AppendStream([$a, $b]); $composed->addStream(Psr7\stream_for(' Above all listen to me')); echo $composed(); // abc, 123. Above all listen to me.

CachingStream

GuzzleHttp\Psr7\CachingStream

검색할 수 없는 스트림에서 이전에 읽은 바이트에 대한 검색을 허용하기 위해 사용됩니다. 이 기능은 스트림을 되감아야 하기 때문에(예를 들어 리디렉션의 결과로) 검색할 수 없는 개체 본문 전송에 실패할 때 유용합니다. 이전에 읽은 바이트가 먼저 메모리에 캐시된 다음 디스크에 캐시되도록 원격 스트림에서 읽은 데이터는 PHP 임시 스트림에서 버퍼링됩니다.

use GuzzleHttp\Psr7; $original = Psr7\stream_for(fopen('http://www.google.com', 'r')); $stream = new Psr7\CachingStream($original); $stream->read(1024); echo $stream->tell(); // 1024 $stream->seek(0); echo $stream->tell(); // 0

InflateStream

GuzzleHttp\Psr7\InflateStream

PHP의 zlib.inflate 필터를 사용하여 gzip으로 압축된 콘텐츠를 inflate 또는 deflate합니다.

이 스트림 데코레이터는 지정된 스트림의 처음 10바이트를 건너뛰어서 gzip 헤더를 제거하고, 제공된 스트림을 PHP 스트림 리소스로 변환한 다음, zlib.inflate 필터를 추가합니다. 그런 다음 스트림은 Guzzle 스트림으로 사용될 Guzzle 스트림 리소스로 다시 변환됩니다.

LazyOpenStream

GuzzleHttp\Psr7\LazyOpenStream

스트림에서 I/O 작업이 수행된 후에만 열리는 파일에 지연 읽기 또는 쓰기를 수행합니다.

use GuzzleHttp\Psr7; $stream = new Psr7\LazyOpenStream('/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

GuzzleHttp\Psr7\LimitStream

기존 스트림 객체의 하위 집합이나 조각을 읽는 데 사용됩니다. 이 기능은 큰 파일을 청크로 전송될 작은 부분으로 분리하는 경우에 유용합니다(예: Amazon S3 멀티파트 업로드 API).

use GuzzleHttp\Psr7; $original = Psr7\stream_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 Psr7\LimitStream($original, 1024, 2048); echo $stream->getSize(); // >>> 1024 echo $stream->tell(); // >>> 0

NoSeekStream

GuzzleHttp\Psr7\NoSeekStream

스트림을 래핑하고 검색을 허용하지 않습니다.

use GuzzleHttp\Psr7; $original = Psr7\stream_for('foo'); $noSeek = new Psr7\NoSeekStream($original); echo $noSeek->read(3); // foo var_export($noSeek->isSeekable()); // false $noSeek->seek(0); var_export($noSeek->read(3)); // NULL

PumpStream

GuzzleHttp\Psr7\PumpStream

PHP collable에서 데이터를 가져오는 읽기 전용 스트림을 제공합니다.

제공된 collable을 호출하면 PumpStream은 읽기 요청된 만큼의 데이터를 collable에 전달합니다. collable은 이 값을 무시하고 요청된 것보다 더 적거나 더 많은 바이트를 반환하도록 선택할 수 있습니다. 제공된 collable에서 반환하는 추가 데이터는 PumpStream의 read() 함수를 사용하여 드레이닝될 때까지 내부적으로 버퍼링됩니다. 읽을 데이터가 더 이상 없을 경우 제공된 collable은 false를 반환해야 합니다.

스트림 데코레이터 구현

스트림 데코레이터 생성은 GuzzleHttp\Psr7\StreamDecoratorTrait 덕분에 매우 쉽습니다. 이 특성은 기본 스트림에 프록시하여 Psr\Http\Message\StreamInterface를 구현하는 메서드를 제공합니다. useStreamDecoratorTrait하고 사용자 지정 메서드를 구현합니다.

예를 들어 스트림에서 마지막 바이트를 읽을 때마다 특정 함수를 호출하려 한다고 가정합니다. read() 메서드를 재정의하여 이 작업을 구현할 수 있습니다.

use Psr\Http\Message\StreamInterface; use GuzzleHttp\Psr7\StreamDecoratorTrait; 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; } }

이상과 같이 이 데코레이터를 기존 스트림에 추가하고 사용할 수 있습니다.

use GuzzleHttp\Psr7; $original = Psr7\stream_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!"