@@ -29,24 +29,24 @@ |
||
| 29 | 29 | */ |
| 30 | 30 | function server_request_protocol_version(?array $serverParams = null): string |
| 31 | 31 | { |
| 32 | - $serverParams ??= $_SERVER; |
|
| 32 | + $serverParams ??= $_SERVER; |
|
| 33 | 33 | |
| 34 | - if (!isset($serverParams['SERVER_PROTOCOL'])) { |
|
| 35 | - return '1.1'; |
|
| 36 | - } |
|
| 34 | + if (!isset($serverParams['SERVER_PROTOCOL'])) { |
|
| 35 | + return '1.1'; |
|
| 36 | + } |
|
| 37 | 37 | |
| 38 | - // "HTTP" "/" 1*digit "." 1*digit |
|
| 39 | - sscanf($serverParams['SERVER_PROTOCOL'], 'HTTP/%d.%d', $major, $minor); |
|
| 38 | + // "HTTP" "/" 1*digit "." 1*digit |
|
| 39 | + sscanf($serverParams['SERVER_PROTOCOL'], 'HTTP/%d.%d', $major, $minor); |
|
| 40 | 40 | |
| 41 | - // e.g.: HTTP/1.1 |
|
| 42 | - if (isset($minor)) { |
|
| 43 | - return sprintf('%d.%d', $major, $minor); |
|
| 44 | - } |
|
| 41 | + // e.g.: HTTP/1.1 |
|
| 42 | + if (isset($minor)) { |
|
| 43 | + return sprintf('%d.%d', $major, $minor); |
|
| 44 | + } |
|
| 45 | 45 | |
| 46 | - // e.g.: HTTP/2 |
|
| 47 | - if (isset($major)) { |
|
| 48 | - return sprintf('%d', $major); |
|
| 49 | - } |
|
| 46 | + // e.g.: HTTP/2 |
|
| 47 | + if (isset($major)) { |
|
| 48 | + return sprintf('%d', $major); |
|
| 49 | + } |
|
| 50 | 50 | |
| 51 | - return '1.1'; |
|
| 51 | + return '1.1'; |
|
| 52 | 52 | } |
@@ -16,7 +16,7 @@ |
||
| 16 | 16 | */ |
| 17 | 17 | function server_request_method(?array $serverParams = null): string |
| 18 | 18 | { |
| 19 | - $serverParams ??= $_SERVER; |
|
| 19 | + $serverParams ??= $_SERVER; |
|
| 20 | 20 | |
| 21 | - return $serverParams['REQUEST_METHOD'] ?? 'GET'; |
|
| 21 | + return $serverParams['REQUEST_METHOD'] ?? 'GET'; |
|
| 22 | 22 | } |
@@ -26,43 +26,43 @@ |
||
| 26 | 26 | */ |
| 27 | 27 | function server_request_files(?array $files = null): array |
| 28 | 28 | { |
| 29 | - $files ??= $_FILES; |
|
| 29 | + $files ??= $_FILES; |
|
| 30 | 30 | |
| 31 | - $walker = static function ($path, $size, $error, $name, $type) use (&$walker) { |
|
| 32 | - if (!is_array($path)) { |
|
| 33 | - $stream = $error === UPLOAD_ERR_OK ? new FileStream($path, 'rb') : null; |
|
| 31 | + $walker = static function ($path, $size, $error, $name, $type) use (&$walker) { |
|
| 32 | + if (!is_array($path)) { |
|
| 33 | + $stream = $error === UPLOAD_ERR_OK ? new FileStream($path, 'rb') : null; |
|
| 34 | 34 | |
| 35 | - return new UploadedFile($stream, $size, $error, $name, $type); |
|
| 36 | - } |
|
| 35 | + return new UploadedFile($stream, $size, $error, $name, $type); |
|
| 36 | + } |
|
| 37 | 37 | |
| 38 | - $result = []; |
|
| 39 | - foreach ($path as $key => $_) { |
|
| 40 | - if ($error[$key] !== UPLOAD_ERR_NO_FILE) { |
|
| 41 | - $result[$key] = $walker( |
|
| 42 | - $path[$key], |
|
| 43 | - $size[$key], |
|
| 44 | - $error[$key], |
|
| 45 | - $name[$key], |
|
| 46 | - $type[$key], |
|
| 47 | - ); |
|
| 48 | - } |
|
| 49 | - } |
|
| 38 | + $result = []; |
|
| 39 | + foreach ($path as $key => $_) { |
|
| 40 | + if ($error[$key] !== UPLOAD_ERR_NO_FILE) { |
|
| 41 | + $result[$key] = $walker( |
|
| 42 | + $path[$key], |
|
| 43 | + $size[$key], |
|
| 44 | + $error[$key], |
|
| 45 | + $name[$key], |
|
| 46 | + $type[$key], |
|
| 47 | + ); |
|
| 48 | + } |
|
| 49 | + } |
|
| 50 | 50 | |
| 51 | - return $result; |
|
| 52 | - }; |
|
| 51 | + return $result; |
|
| 52 | + }; |
|
| 53 | 53 | |
| 54 | - $result = []; |
|
| 55 | - foreach ($files as $key => $file) { |
|
| 56 | - if ($file['error'] !== UPLOAD_ERR_NO_FILE) { |
|
| 57 | - $result[$key] = $walker( |
|
| 58 | - $file['tmp_name'], |
|
| 59 | - $file['size'], |
|
| 60 | - $file['error'], |
|
| 61 | - $file['name'], |
|
| 62 | - $file['type'], |
|
| 63 | - ); |
|
| 64 | - } |
|
| 65 | - } |
|
| 54 | + $result = []; |
|
| 55 | + foreach ($files as $key => $file) { |
|
| 56 | + if ($file['error'] !== UPLOAD_ERR_NO_FILE) { |
|
| 57 | + $result[$key] = $walker( |
|
| 58 | + $file['tmp_name'], |
|
| 59 | + $file['size'], |
|
| 60 | + $file['error'], |
|
| 61 | + $file['name'], |
|
| 62 | + $file['type'], |
|
| 63 | + ); |
|
| 64 | + } |
|
| 65 | + } |
|
| 66 | 66 | |
| 67 | - return $result; |
|
| 67 | + return $result; |
|
| 68 | 68 | } |
@@ -25,29 +25,29 @@ |
||
| 25 | 25 | */ |
| 26 | 26 | function server_request_headers(?array $serverParams = null): array |
| 27 | 27 | { |
| 28 | - $serverParams ??= $_SERVER; |
|
| 28 | + $serverParams ??= $_SERVER; |
|
| 29 | 29 | |
| 30 | - // https://datatracker.ietf.org/doc/html/rfc3875#section-4.1.2 |
|
| 31 | - if (!isset($serverParams['HTTP_CONTENT_LENGTH']) && isset($serverParams['CONTENT_LENGTH'])) { |
|
| 32 | - $serverParams['HTTP_CONTENT_LENGTH'] = $serverParams['CONTENT_LENGTH']; |
|
| 33 | - } |
|
| 30 | + // https://datatracker.ietf.org/doc/html/rfc3875#section-4.1.2 |
|
| 31 | + if (!isset($serverParams['HTTP_CONTENT_LENGTH']) && isset($serverParams['CONTENT_LENGTH'])) { |
|
| 32 | + $serverParams['HTTP_CONTENT_LENGTH'] = $serverParams['CONTENT_LENGTH']; |
|
| 33 | + } |
|
| 34 | 34 | |
| 35 | - // https://datatracker.ietf.org/doc/html/rfc3875#section-4.1.3 |
|
| 36 | - if (!isset($serverParams['HTTP_CONTENT_TYPE']) && isset($serverParams['CONTENT_TYPE'])) { |
|
| 37 | - $serverParams['HTTP_CONTENT_TYPE'] = $serverParams['CONTENT_TYPE']; |
|
| 38 | - } |
|
| 35 | + // https://datatracker.ietf.org/doc/html/rfc3875#section-4.1.3 |
|
| 36 | + if (!isset($serverParams['HTTP_CONTENT_TYPE']) && isset($serverParams['CONTENT_TYPE'])) { |
|
| 37 | + $serverParams['HTTP_CONTENT_TYPE'] = $serverParams['CONTENT_TYPE']; |
|
| 38 | + } |
|
| 39 | 39 | |
| 40 | - $result = []; |
|
| 41 | - foreach ($serverParams as $key => $value) { |
|
| 42 | - if (strncmp('HTTP_', $key, 5) !== 0) { |
|
| 43 | - continue; |
|
| 44 | - } |
|
| 40 | + $result = []; |
|
| 41 | + foreach ($serverParams as $key => $value) { |
|
| 42 | + if (strncmp('HTTP_', $key, 5) !== 0) { |
|
| 43 | + continue; |
|
| 44 | + } |
|
| 45 | 45 | |
| 46 | - $name = strtr(substr($key, 5), '_', '-'); |
|
| 47 | - $name = ucwords(strtolower($name), '-'); |
|
| 46 | + $name = strtr(substr($key, 5), '_', '-'); |
|
| 47 | + $name = ucwords(strtolower($name), '-'); |
|
| 48 | 48 | |
| 49 | - $result[$name] = $value; |
|
| 50 | - } |
|
| 49 | + $result[$name] = $value; |
|
| 50 | + } |
|
| 51 | 51 | |
| 52 | - return $result; |
|
| 52 | + return $result; |
|
| 53 | 53 | } |
@@ -17,35 +17,35 @@ |
||
| 17 | 17 | |
| 18 | 18 | function server_request_uri(?array $serverParams = null): UriInterface |
| 19 | 19 | { |
| 20 | - $serverParams ??= $_SERVER; |
|
| 21 | - |
|
| 22 | - if (array_key_exists('HTTPS', $serverParams)) { |
|
| 23 | - if ('off' !== $serverParams['HTTPS']) { |
|
| 24 | - $scheme = 'https://'; |
|
| 25 | - } |
|
| 26 | - } |
|
| 27 | - |
|
| 28 | - if (array_key_exists('HTTP_HOST', $serverParams)) { |
|
| 29 | - $host = $serverParams['HTTP_HOST']; |
|
| 30 | - } elseif (array_key_exists('SERVER_NAME', $serverParams)) { |
|
| 31 | - $host = $serverParams['SERVER_NAME']; |
|
| 32 | - if (array_key_exists('SERVER_PORT', $serverParams)) { |
|
| 33 | - $host .= ':' . $serverParams['SERVER_PORT']; |
|
| 34 | - } |
|
| 35 | - } |
|
| 36 | - |
|
| 37 | - if (array_key_exists('REQUEST_URI', $serverParams)) { |
|
| 38 | - $target = $serverParams['REQUEST_URI']; |
|
| 39 | - } elseif (array_key_exists('PHP_SELF', $serverParams)) { |
|
| 40 | - $target = $serverParams['PHP_SELF']; |
|
| 41 | - if (array_key_exists('QUERY_STRING', $serverParams)) { |
|
| 42 | - $target .= '?' . $serverParams['QUERY_STRING']; |
|
| 43 | - } |
|
| 44 | - } |
|
| 45 | - |
|
| 46 | - return new Uri( |
|
| 47 | - ($scheme ?? 'http://') . |
|
| 48 | - ($host ?? 'localhost') . |
|
| 49 | - ($target ?? '/') |
|
| 50 | - ); |
|
| 20 | + $serverParams ??= $_SERVER; |
|
| 21 | + |
|
| 22 | + if (array_key_exists('HTTPS', $serverParams)) { |
|
| 23 | + if ('off' !== $serverParams['HTTPS']) { |
|
| 24 | + $scheme = 'https://'; |
|
| 25 | + } |
|
| 26 | + } |
|
| 27 | + |
|
| 28 | + if (array_key_exists('HTTP_HOST', $serverParams)) { |
|
| 29 | + $host = $serverParams['HTTP_HOST']; |
|
| 30 | + } elseif (array_key_exists('SERVER_NAME', $serverParams)) { |
|
| 31 | + $host = $serverParams['SERVER_NAME']; |
|
| 32 | + if (array_key_exists('SERVER_PORT', $serverParams)) { |
|
| 33 | + $host .= ':' . $serverParams['SERVER_PORT']; |
|
| 34 | + } |
|
| 35 | + } |
|
| 36 | + |
|
| 37 | + if (array_key_exists('REQUEST_URI', $serverParams)) { |
|
| 38 | + $target = $serverParams['REQUEST_URI']; |
|
| 39 | + } elseif (array_key_exists('PHP_SELF', $serverParams)) { |
|
| 40 | + $target = $serverParams['PHP_SELF']; |
|
| 41 | + if (array_key_exists('QUERY_STRING', $serverParams)) { |
|
| 42 | + $target .= '?' . $serverParams['QUERY_STRING']; |
|
| 43 | + } |
|
| 44 | + } |
|
| 45 | + |
|
| 46 | + return new Uri( |
|
| 47 | + ($scheme ?? 'http://') . |
|
| 48 | + ($host ?? 'localhost') . |
|
| 49 | + ($target ?? '/') |
|
| 50 | + ); |
|
| 51 | 51 | } |
@@ -17,8 +17,8 @@ |
||
| 17 | 17 | |
| 18 | 18 | final class PhpMemoryStream extends Stream |
| 19 | 19 | { |
| 20 | - public function __construct(string $mode = 'r+b') |
|
| 21 | - { |
|
| 22 | - parent::__construct(fopen('php://memory', $mode)); |
|
| 23 | - } |
|
| 20 | + public function __construct(string $mode = 'r+b') |
|
| 21 | + { |
|
| 22 | + parent::__construct(fopen('php://memory', $mode)); |
|
| 23 | + } |
|
| 24 | 24 | } |
@@ -22,36 +22,36 @@ |
||
| 22 | 22 | |
| 23 | 23 | final class TempFileStream extends Stream |
| 24 | 24 | { |
| 25 | - /** |
|
| 26 | - * @throws RuntimeException |
|
| 27 | - */ |
|
| 28 | - public function __construct(string $prefix = '') |
|
| 29 | - { |
|
| 30 | - parent::__construct(self::createFile($prefix)); |
|
| 31 | - } |
|
| 32 | - |
|
| 33 | - /** |
|
| 34 | - * @return resource |
|
| 35 | - * |
|
| 36 | - * @throws RuntimeException |
|
| 37 | - */ |
|
| 38 | - private static function createFile(string $prefix) |
|
| 39 | - { |
|
| 40 | - $dirname = sys_get_temp_dir(); |
|
| 41 | - if (!is_writable($dirname)) { |
|
| 42 | - throw new RuntimeException('Temporary files directory is not writable'); |
|
| 43 | - } |
|
| 44 | - |
|
| 45 | - $filename = tempnam($dirname, $prefix); |
|
| 46 | - if ($filename === false) { |
|
| 47 | - throw new RuntimeException('Temporary file cannot be created'); |
|
| 48 | - } |
|
| 49 | - |
|
| 50 | - $resource = fopen($filename, 'r+b'); |
|
| 51 | - if (!is_resource($resource)) { |
|
| 52 | - throw new RuntimeException('Temporary file cannot be opened'); |
|
| 53 | - } |
|
| 54 | - |
|
| 55 | - return $resource; |
|
| 56 | - } |
|
| 25 | + /** |
|
| 26 | + * @throws RuntimeException |
|
| 27 | + */ |
|
| 28 | + public function __construct(string $prefix = '') |
|
| 29 | + { |
|
| 30 | + parent::__construct(self::createFile($prefix)); |
|
| 31 | + } |
|
| 32 | + |
|
| 33 | + /** |
|
| 34 | + * @return resource |
|
| 35 | + * |
|
| 36 | + * @throws RuntimeException |
|
| 37 | + */ |
|
| 38 | + private static function createFile(string $prefix) |
|
| 39 | + { |
|
| 40 | + $dirname = sys_get_temp_dir(); |
|
| 41 | + if (!is_writable($dirname)) { |
|
| 42 | + throw new RuntimeException('Temporary files directory is not writable'); |
|
| 43 | + } |
|
| 44 | + |
|
| 45 | + $filename = tempnam($dirname, $prefix); |
|
| 46 | + if ($filename === false) { |
|
| 47 | + throw new RuntimeException('Temporary file cannot be created'); |
|
| 48 | + } |
|
| 49 | + |
|
| 50 | + $resource = fopen($filename, 'r+b'); |
|
| 51 | + if (!is_resource($resource)) { |
|
| 52 | + throw new RuntimeException('Temporary file cannot be opened'); |
|
| 53 | + } |
|
| 54 | + |
|
| 55 | + return $resource; |
|
| 56 | + } |
|
| 57 | 57 | } |
@@ -18,13 +18,13 @@ |
||
| 18 | 18 | |
| 19 | 19 | final class PhpTempStream extends Stream |
| 20 | 20 | { |
| 21 | - /** |
|
| 22 | - * @param int<0, max> $maxmemory |
|
| 23 | - */ |
|
| 24 | - public function __construct(string $mode = 'r+b', int $maxmemory = 2097152) |
|
| 25 | - { |
|
| 26 | - $uri = sprintf('php://temp/maxmemory:%d', $maxmemory); |
|
| 21 | + /** |
|
| 22 | + * @param int<0, max> $maxmemory |
|
| 23 | + */ |
|
| 24 | + public function __construct(string $mode = 'r+b', int $maxmemory = 2097152) |
|
| 25 | + { |
|
| 26 | + $uri = sprintf('php://temp/maxmemory:%d', $maxmemory); |
|
| 27 | 27 | |
| 28 | - parent::__construct(fopen($uri, $mode)); |
|
| 29 | - } |
|
| 28 | + parent::__construct(fopen($uri, $mode)); |
|
| 29 | + } |
|
| 30 | 30 | } |
@@ -21,24 +21,24 @@ |
||
| 21 | 21 | |
| 22 | 22 | final class PhpInputStream extends Stream |
| 23 | 23 | { |
| 24 | - public function __construct() |
|
| 25 | - { |
|
| 26 | - parent::__construct(self::copyInput()); |
|
| 27 | - } |
|
| 28 | - |
|
| 29 | - /** |
|
| 30 | - * @return resource |
|
| 31 | - */ |
|
| 32 | - private static function copyInput() |
|
| 33 | - { |
|
| 34 | - /** @var resource $input */ |
|
| 35 | - $input = fopen('php://input', 'rb'); |
|
| 36 | - /** @var resource $resource */ |
|
| 37 | - $resource = fopen('php://temp', 'r+b'); |
|
| 38 | - |
|
| 39 | - stream_copy_to_stream($input, $resource); |
|
| 40 | - fseek($resource, 0, SEEK_SET); |
|
| 41 | - |
|
| 42 | - return $resource; |
|
| 43 | - } |
|
| 24 | + public function __construct() |
|
| 25 | + { |
|
| 26 | + parent::__construct(self::copyInput()); |
|
| 27 | + } |
|
| 28 | + |
|
| 29 | + /** |
|
| 30 | + * @return resource |
|
| 31 | + */ |
|
| 32 | + private static function copyInput() |
|
| 33 | + { |
|
| 34 | + /** @var resource $input */ |
|
| 35 | + $input = fopen('php://input', 'rb'); |
|
| 36 | + /** @var resource $resource */ |
|
| 37 | + $resource = fopen('php://temp', 'r+b'); |
|
| 38 | + |
|
| 39 | + stream_copy_to_stream($input, $resource); |
|
| 40 | + fseek($resource, 0, SEEK_SET); |
|
| 41 | + |
|
| 42 | + return $resource; |
|
| 43 | + } |
|
| 44 | 44 | } |