diff --git a/spec/StreamFactory/StreamFactoryBehavior.php b/spec/StreamFactory/StreamFactoryBehavior.php index 88ab4f4..afc67ef 100644 --- a/spec/StreamFactory/StreamFactoryBehavior.php +++ b/spec/StreamFactory/StreamFactoryBehavior.php @@ -24,4 +24,12 @@ function it_creates_a_stream_from_null() { $this->createStream(null)->shouldHaveType('Psr\Http\Message\StreamInterface'); } + + function it_creates_a_stream_from_non_seekable_resource() + { + $url = 'https://raw.githubusercontent.com/php-http/multipart-stream-builder/master/tests/Resources/httplug.png'; + $resource = fopen($url, 'r'); + $this->createStream($resource) + ->shouldHaveType('Psr\Http\Message\StreamInterface'); + } } diff --git a/src/StreamFactory/DiactorosStreamFactory.php b/src/StreamFactory/DiactorosStreamFactory.php index d3bed9d..a73abb0 100644 --- a/src/StreamFactory/DiactorosStreamFactory.php +++ b/src/StreamFactory/DiactorosStreamFactory.php @@ -34,7 +34,9 @@ public function createStream($body = null) } } - $body->rewind(); + if ($body->isSeekable()) { + $body->rewind(); + } return $body; } diff --git a/src/StreamFactory/SlimStreamFactory.php b/src/StreamFactory/SlimStreamFactory.php index 32b9ac7..ba0bb17 100644 --- a/src/StreamFactory/SlimStreamFactory.php +++ b/src/StreamFactory/SlimStreamFactory.php @@ -35,7 +35,9 @@ public function createStream($body = null) $stream->write((string) $body); } - $stream->rewind(); + if ($stream->isSeekable()) { + $stream->rewind(); + } return $stream; }