diff --git a/CHANGELOG.md b/CHANGELOG.md index 1219a6c..7c322d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - [#230](https://github.com/php-http/discovery/pull/230) - Add Psr18Client to make it straightforward to use PSR-18 - [#232](https://github.com/php-http/discovery/pull/232) - Allow pinning the preferred implementations in composer.json +- [#233](https://github.com/php-http/discovery/pull/233) - Fix Psr17Factory::createServerRequestFromGlobals() when uploaded files have been moved ## 1.16.0 - 2023-04-26 diff --git a/src/Psr17Factory.php b/src/Psr17Factory.php index 2da3193..5d3ab92 100644 --- a/src/Psr17Factory.php +++ b/src/Psr17Factory.php @@ -283,7 +283,7 @@ private function normalizeFiles(array $files): array private function createUploadedFileFromSpec(array $value) { if (!is_array($tmpName = $value['tmp_name'])) { - $file = $this->createStreamFromFile($tmpName, 'r'); + $file = is_file($tmpName) ? $this->createStreamFromFile($tmpName, 'r') : $this->createStream(); return $this->createUploadedFile($file, $value['size'], $value['error'], $value['name'], $value['type']); } diff --git a/tests/Psr17FactoryTest.php b/tests/Psr17FactoryTest.php index 94bf177..28db75f 100644 --- a/tests/Psr17FactoryTest.php +++ b/tests/Psr17FactoryTest.php @@ -282,14 +282,14 @@ public function testFromGlobals() 'file' => [ 'name' => 'MyFile.txt', 'type' => 'text/plain', - 'tmp_name' => 'php://memory', + 'tmp_name' => __FILE__, 'error' => UPLOAD_ERR_OK, 'size' => 123, ], 'files' => [ 'name' => ['file_0' => ['NestedFile.txt']], 'type' => ['file_0' => ['text/plain']], - 'tmp_name' => ['file_0' => ['php://memory']], + 'tmp_name' => ['file_0' => ['/not-exists']], 'error' => ['file_0' => [UPLOAD_ERR_OK]], 'size' => ['file_0' => [123]], ], @@ -339,5 +339,8 @@ public function testFromGlobals() ]; self::assertEquals($expectedFiles, $server->getUploadedFiles()); + + self::assertSame('plainfile', $server->getUploadedFiles()['file']->getStream()->getMetadata()['wrapper_type']); + self::assertSame('PHP', $server->getUploadedFiles()['files']['file_0'][0]->getStream()->getMetadata()['wrapper_type']); } }