Update Composer, update everything
This commit is contained in:
parent
ea3e94409f
commit
dda5c284b6
19527 changed files with 1135420 additions and 351004 deletions
40
vendor/zendframework/zend-diactoros/src/functions/create_uploaded_file.php
vendored
Normal file
40
vendor/zendframework/zend-diactoros/src/functions/create_uploaded_file.php
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
/**
|
||||
* @see https://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros;
|
||||
|
||||
use InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* Create an uploaded file instance from an array of values.
|
||||
*
|
||||
* @param array $spec A single $_FILES entry.
|
||||
* @return UploadedFile
|
||||
* @throws InvalidArgumentException if one or more of the tmp_name, size,
|
||||
* or error keys are missing from $spec.
|
||||
*/
|
||||
function createUploadedFile(array $spec)
|
||||
{
|
||||
if (! isset($spec['tmp_name'])
|
||||
|| ! isset($spec['size'])
|
||||
|| ! isset($spec['error'])
|
||||
) {
|
||||
throw new InvalidArgumentException(sprintf(
|
||||
'$spec provided to %s MUST contain each of the keys "tmp_name",'
|
||||
. ' "size", and "error"; one or more were missing',
|
||||
__FUNCTION__
|
||||
));
|
||||
}
|
||||
|
||||
return new UploadedFile(
|
||||
$spec['tmp_name'],
|
||||
$spec['size'],
|
||||
$spec['error'],
|
||||
isset($spec['name']) ? $spec['name'] : null,
|
||||
isset($spec['type']) ? $spec['type'] : null
|
||||
);
|
||||
}
|
||||
50
vendor/zendframework/zend-diactoros/src/functions/marshal_headers_from_sapi.php
vendored
Normal file
50
vendor/zendframework/zend-diactoros/src/functions/marshal_headers_from_sapi.php
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
/**
|
||||
* @see https://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros;
|
||||
|
||||
use function array_key_exists;
|
||||
use function strpos;
|
||||
use function strtolower;
|
||||
use function strtr;
|
||||
use function substr;
|
||||
|
||||
/**
|
||||
* @param array $server Values obtained from the SAPI (generally `$_SERVER`).
|
||||
* @return array Header/value pairs
|
||||
*/
|
||||
function marshalHeadersFromSapi(array $server)
|
||||
{
|
||||
$headers = [];
|
||||
foreach ($server as $key => $value) {
|
||||
// Apache prefixes environment variables with REDIRECT_
|
||||
// if they are added by rewrite rules
|
||||
if (strpos($key, 'REDIRECT_') === 0) {
|
||||
$key = substr($key, 9);
|
||||
|
||||
// We will not overwrite existing variables with the
|
||||
// prefixed versions, though
|
||||
if (array_key_exists($key, $server)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if ($value && strpos($key, 'HTTP_') === 0) {
|
||||
$name = strtr(strtolower(substr($key, 5)), '_', '-');
|
||||
$headers[$name] = $value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($value && strpos($key, 'CONTENT_') === 0) {
|
||||
$name = 'content-' . strtolower(substr($key, 8));
|
||||
$headers[$name] = $value;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return $headers;
|
||||
}
|
||||
19
vendor/zendframework/zend-diactoros/src/functions/marshal_method_from_sapi.php
vendored
Normal file
19
vendor/zendframework/zend-diactoros/src/functions/marshal_method_from_sapi.php
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
/**
|
||||
* @see https://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros;
|
||||
|
||||
/**
|
||||
* Retrieve the request method from the SAPI parameters.
|
||||
*
|
||||
* @param array $server
|
||||
* @return string
|
||||
*/
|
||||
function marshalMethodFromSapi(array $server)
|
||||
{
|
||||
return isset($server['REQUEST_METHOD']) ? $server['REQUEST_METHOD'] : 'GET';
|
||||
}
|
||||
36
vendor/zendframework/zend-diactoros/src/functions/marshal_protocol_version_from_sapi.php
vendored
Normal file
36
vendor/zendframework/zend-diactoros/src/functions/marshal_protocol_version_from_sapi.php
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
/**
|
||||
* @see https://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros;
|
||||
|
||||
use UnexpectedValueException;
|
||||
|
||||
use function preg_match;
|
||||
|
||||
/**
|
||||
* Return HTTP protocol version (X.Y) as discovered within a `$_SERVER` array.
|
||||
*
|
||||
* @param array $server
|
||||
* @return string
|
||||
* @throws UnexpectedValueException if the $server['SERVER_PROTOCOL'] value is
|
||||
* malformed.
|
||||
*/
|
||||
function marshalProtocolVersionFromSapi(array $server)
|
||||
{
|
||||
if (! isset($server['SERVER_PROTOCOL'])) {
|
||||
return '1.1';
|
||||
}
|
||||
|
||||
if (! preg_match('#^(HTTP/)?(?P<version>[1-9]\d*(?:\.\d)?)$#', $server['SERVER_PROTOCOL'], $matches)) {
|
||||
throw new UnexpectedValueException(sprintf(
|
||||
'Unrecognized protocol version (%s)',
|
||||
$server['SERVER_PROTOCOL']
|
||||
));
|
||||
}
|
||||
|
||||
return $matches['version'];
|
||||
}
|
||||
212
vendor/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php
vendored
Normal file
212
vendor/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php
vendored
Normal file
|
|
@ -0,0 +1,212 @@
|
|||
<?php
|
||||
/**
|
||||
* @see https://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros;
|
||||
|
||||
use function array_change_key_case;
|
||||
use function array_key_exists;
|
||||
use function explode;
|
||||
use function implode;
|
||||
use function is_array;
|
||||
use function ltrim;
|
||||
use function preg_match;
|
||||
use function preg_replace;
|
||||
use function strlen;
|
||||
use function strpos;
|
||||
use function strtolower;
|
||||
use function substr;
|
||||
|
||||
/**
|
||||
* Marshal a Uri instance based on the values presnt in the $_SERVER array and headers.
|
||||
*
|
||||
* @param array $server SAPI parameters
|
||||
* @param array $headers HTTP request headers
|
||||
* @return Uri
|
||||
*/
|
||||
function marshalUriFromSapi(array $server, array $headers)
|
||||
{
|
||||
/**
|
||||
* Retrieve a header value from an array of headers using a case-insensitive lookup.
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $headers Key/value header pairs
|
||||
* @param mixed $default Default value to return if header not found
|
||||
* @return mixed
|
||||
*/
|
||||
$getHeaderFromArray = function ($name, array $headers, $default = null) {
|
||||
$header = strtolower($name);
|
||||
$headers = array_change_key_case($headers, CASE_LOWER);
|
||||
if (array_key_exists($header, $headers)) {
|
||||
$value = is_array($headers[$header]) ? implode(', ', $headers[$header]) : $headers[$header];
|
||||
return $value;
|
||||
}
|
||||
|
||||
return $default;
|
||||
};
|
||||
|
||||
/**
|
||||
* Marshal the host and port from HTTP headers and/or the PHP environment.
|
||||
*
|
||||
* @param array $headers
|
||||
* @param array $server
|
||||
* @return array Array of two items, host and port, in that order (can be
|
||||
* passed to a list() operation).
|
||||
*/
|
||||
$marshalHostAndPort = function (array $headers, array $server) use ($getHeaderFromArray) {
|
||||
/**
|
||||
* @param string|array $host
|
||||
* @return array Array of two items, host and port, in that order (can be
|
||||
* passed to a list() operation).
|
||||
*/
|
||||
$marshalHostAndPortFromHeader = function ($host) {
|
||||
if (is_array($host)) {
|
||||
$host = implode(', ', $host);
|
||||
}
|
||||
|
||||
$port = null;
|
||||
|
||||
// works for regname, IPv4 & IPv6
|
||||
if (preg_match('|\:(\d+)$|', $host, $matches)) {
|
||||
$host = substr($host, 0, -1 * (strlen($matches[1]) + 1));
|
||||
$port = (int) $matches[1];
|
||||
}
|
||||
|
||||
return [$host, $port];
|
||||
};
|
||||
|
||||
/**
|
||||
* @param array $server
|
||||
* @param string $host
|
||||
* @param null|int $port
|
||||
* @return array Array of two items, host and port, in that order (can be
|
||||
* passed to a list() operation).
|
||||
*/
|
||||
$marshalIpv6HostAndPort = function (array $server, $host, $port) {
|
||||
$host = '[' . $server['SERVER_ADDR'] . ']';
|
||||
$port = $port ?: 80;
|
||||
if ($port . ']' === substr($host, strrpos($host, ':') + 1)) {
|
||||
// The last digit of the IPv6-Address has been taken as port
|
||||
// Unset the port so the default port can be used
|
||||
$port = null;
|
||||
}
|
||||
return [$host, $port];
|
||||
};
|
||||
|
||||
static $defaults = ['', null];
|
||||
|
||||
if ($getHeaderFromArray('host', $headers, false)) {
|
||||
return $marshalHostAndPortFromHeader($getHeaderFromArray('host', $headers));
|
||||
}
|
||||
|
||||
if (! isset($server['SERVER_NAME'])) {
|
||||
return $defaults;
|
||||
}
|
||||
|
||||
$host = $server['SERVER_NAME'];
|
||||
$port = isset($server['SERVER_PORT']) ? (int) $server['SERVER_PORT'] : null;
|
||||
|
||||
if (! isset($server['SERVER_ADDR'])
|
||||
|| ! preg_match('/^\[[0-9a-fA-F\:]+\]$/', $host)
|
||||
) {
|
||||
return [$host, $port];
|
||||
}
|
||||
|
||||
// Misinterpreted IPv6-Address
|
||||
// Reported for Safari on Windows
|
||||
return $marshalIpv6HostAndPort($server, $host, $port);
|
||||
};
|
||||
|
||||
/**
|
||||
* Detect the path for the request
|
||||
*
|
||||
* Looks at a variety of criteria in order to attempt to autodetect the base
|
||||
* request path, including:
|
||||
*
|
||||
* - IIS7 UrlRewrite environment
|
||||
* - REQUEST_URI
|
||||
* - ORIG_PATH_INFO
|
||||
*
|
||||
* From ZF2's Zend\Http\PhpEnvironment\Request class
|
||||
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*
|
||||
* @param array $server SAPI environment array (typically `$_SERVER`)
|
||||
* @return string Discovered path
|
||||
*/
|
||||
$marshalRequestPath = function (array $server) {
|
||||
// IIS7 with URL Rewrite: make sure we get the unencoded url
|
||||
// (double slash problem).
|
||||
$iisUrlRewritten = array_key_exists('IIS_WasUrlRewritten', $server) ? $server['IIS_WasUrlRewritten'] : null;
|
||||
$unencodedUrl = array_key_exists('UNENCODED_URL', $server) ? $server['UNENCODED_URL'] : '';
|
||||
if ('1' === $iisUrlRewritten && ! empty($unencodedUrl)) {
|
||||
return $unencodedUrl;
|
||||
}
|
||||
|
||||
$requestUri = array_key_exists('REQUEST_URI', $server) ? $server['REQUEST_URI'] : null;
|
||||
|
||||
if ($requestUri !== null) {
|
||||
return preg_replace('#^[^/:]+://[^/]+#', '', $requestUri);
|
||||
}
|
||||
|
||||
$origPathInfo = array_key_exists('ORIG_PATH_INFO', $server) ? $server['ORIG_PATH_INFO'] : null;
|
||||
if (empty($origPathInfo)) {
|
||||
return '/';
|
||||
}
|
||||
|
||||
return $origPathInfo;
|
||||
};
|
||||
|
||||
$uri = new Uri('');
|
||||
|
||||
// URI scheme
|
||||
$scheme = 'http';
|
||||
if (array_key_exists('HTTPS', $server)) {
|
||||
$https = $server['HTTPS'];
|
||||
} elseif (array_key_exists('https', $server)) {
|
||||
$https = $server['https'];
|
||||
} else {
|
||||
$https = false;
|
||||
}
|
||||
if (($https && 'off' !== strtolower($https))
|
||||
|| strtolower($getHeaderFromArray('x-forwarded-proto', $headers, false)) === 'https'
|
||||
) {
|
||||
$scheme = 'https';
|
||||
}
|
||||
$uri = $uri->withScheme($scheme);
|
||||
|
||||
// Set the host
|
||||
list($host, $port) = $marshalHostAndPort($headers, $server);
|
||||
if (! empty($host)) {
|
||||
$uri = $uri->withHost($host);
|
||||
if (! empty($port)) {
|
||||
$uri = $uri->withPort($port);
|
||||
}
|
||||
}
|
||||
|
||||
// URI path
|
||||
$path = $marshalRequestPath($server);
|
||||
|
||||
// Strip query string
|
||||
$path = explode('?', $path, 2)[0];
|
||||
|
||||
// URI query
|
||||
$query = '';
|
||||
if (isset($server['QUERY_STRING'])) {
|
||||
$query = ltrim($server['QUERY_STRING'], '?');
|
||||
}
|
||||
|
||||
// URI fragment
|
||||
$fragment = '';
|
||||
if (strpos($path, '#') !== false) {
|
||||
list($path, $fragment) = explode('#', $path, 2);
|
||||
}
|
||||
|
||||
return $uri
|
||||
->withPath($path)
|
||||
->withFragment($fragment)
|
||||
->withQuery($query);
|
||||
}
|
||||
51
vendor/zendframework/zend-diactoros/src/functions/normalize_server.php
vendored
Normal file
51
vendor/zendframework/zend-diactoros/src/functions/normalize_server.php
vendored
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
/**
|
||||
* @see https://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros;
|
||||
|
||||
use function is_callable;
|
||||
|
||||
/**
|
||||
* Marshal the $_SERVER array
|
||||
*
|
||||
* Pre-processes and returns the $_SERVER superglobal. In particularly, it
|
||||
* attempts to detect the Authorization header, which is often not aggregated
|
||||
* correctly under various SAPI/httpd combinations.
|
||||
*
|
||||
* @param array $server
|
||||
* @param null|callable $apacheRequestHeaderCallback Callback that can be used to
|
||||
* retrieve Apache request headers. This defaults to
|
||||
* `apache_request_headers` under the Apache mod_php.
|
||||
* @return array Either $server verbatim, or with an added HTTP_AUTHORIZATION header.
|
||||
*/
|
||||
function normalizeServer(array $server, callable $apacheRequestHeaderCallback = null)
|
||||
{
|
||||
if (null === $apacheRequestHeaderCallback && is_callable('apache_request_headers')) {
|
||||
$apacheRequestHeaderCallback = 'apache_request_headers';
|
||||
}
|
||||
|
||||
// If the HTTP_AUTHORIZATION value is already set, or the callback is not
|
||||
// callable, we return verbatim
|
||||
if (isset($server['HTTP_AUTHORIZATION'])
|
||||
|| ! is_callable($apacheRequestHeaderCallback)
|
||||
) {
|
||||
return $server;
|
||||
}
|
||||
|
||||
$apacheRequestHeaders = $apacheRequestHeaderCallback();
|
||||
if (isset($apacheRequestHeaders['Authorization'])) {
|
||||
$server['HTTP_AUTHORIZATION'] = $apacheRequestHeaders['Authorization'];
|
||||
return $server;
|
||||
}
|
||||
|
||||
if (isset($apacheRequestHeaders['authorization'])) {
|
||||
$server['HTTP_AUTHORIZATION'] = $apacheRequestHeaders['authorization'];
|
||||
return $server;
|
||||
}
|
||||
|
||||
return $server;
|
||||
}
|
||||
129
vendor/zendframework/zend-diactoros/src/functions/normalize_uploaded_files.php
vendored
Normal file
129
vendor/zendframework/zend-diactoros/src/functions/normalize_uploaded_files.php
vendored
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
<?php
|
||||
/**
|
||||
* @see https://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use Psr\Http\Message\UploadedFileInterface;
|
||||
|
||||
use function is_array;
|
||||
|
||||
/**
|
||||
* Normalize uploaded files
|
||||
*
|
||||
* Transforms each value into an UploadedFile instance, and ensures that nested
|
||||
* arrays are normalized.
|
||||
*
|
||||
* @param array $files
|
||||
* @return UploadedFileInterface[]
|
||||
* @throws InvalidArgumentException for unrecognized values
|
||||
*/
|
||||
function normalizeUploadedFiles(array $files)
|
||||
{
|
||||
/**
|
||||
* Traverse a nested tree of uploaded file specifications.
|
||||
*
|
||||
* @param string[]|array[] $tmpNameTree
|
||||
* @param int[]|array[] $sizeTree
|
||||
* @param int[]|array[] $errorTree
|
||||
* @param string[]|array[]|null $nameTree
|
||||
* @param string[]|array[]|null $typeTree
|
||||
* @return UploadedFile[]|array[]
|
||||
*/
|
||||
$recursiveNormalize = function (
|
||||
array $tmpNameTree,
|
||||
array $sizeTree,
|
||||
array $errorTree,
|
||||
array $nameTree = null,
|
||||
array $typeTree = null
|
||||
) use (&$recursiveNormalize) {
|
||||
$normalized = [];
|
||||
foreach ($tmpNameTree as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
// Traverse
|
||||
$normalized[$key] = $recursiveNormalize(
|
||||
$tmpNameTree[$key],
|
||||
$sizeTree[$key],
|
||||
$errorTree[$key],
|
||||
isset($nameTree[$key]) ? $nameTree[$key] : null,
|
||||
isset($typeTree[$key]) ? $typeTree[$key] : null
|
||||
);
|
||||
continue;
|
||||
}
|
||||
$normalized[$key] = createUploadedFile([
|
||||
'tmp_name' => $tmpNameTree[$key],
|
||||
'size' => $sizeTree[$key],
|
||||
'error' => $errorTree[$key],
|
||||
'name' => isset($nameTree[$key]) ? $nameTree[$key] : null,
|
||||
'type' => isset($typeTree[$key]) ? $typeTree[$key] : null
|
||||
]);
|
||||
}
|
||||
return $normalized;
|
||||
};
|
||||
|
||||
/**
|
||||
* Normalize an array of file specifications.
|
||||
*
|
||||
* Loops through all nested files (as determined by receiving an array to the
|
||||
* `tmp_name` key of a `$_FILES` specification) and returns a normalized array
|
||||
* of UploadedFile instances.
|
||||
*
|
||||
* This function normalizes a `$_FILES` array representing a nested set of
|
||||
* uploaded files as produced by the php-fpm SAPI, CGI SAPI, or mod_php
|
||||
* SAPI.
|
||||
*
|
||||
* @param array $files
|
||||
* @return UploadedFile[]
|
||||
*/
|
||||
$normalizeUploadedFileSpecification = function (array $files = []) use (&$recursiveNormalize) {
|
||||
if (! isset($files['tmp_name']) || ! is_array($files['tmp_name'])
|
||||
|| ! isset($files['size']) || ! is_array($files['size'])
|
||||
|| ! isset($files['error']) || ! is_array($files['error'])
|
||||
) {
|
||||
throw new InvalidArgumentException(sprintf(
|
||||
'$files provided to %s MUST contain each of the keys "tmp_name",'
|
||||
. ' "size", and "error", with each represented as an array;'
|
||||
. ' one or more were missing or non-array values',
|
||||
__FUNCTION__
|
||||
));
|
||||
}
|
||||
|
||||
return $recursiveNormalize(
|
||||
$files['tmp_name'],
|
||||
$files['size'],
|
||||
$files['error'],
|
||||
isset($files['name']) ? $files['name'] : null,
|
||||
isset($files['type']) ? $files['type'] : null
|
||||
);
|
||||
};
|
||||
|
||||
$normalized = [];
|
||||
foreach ($files as $key => $value) {
|
||||
if ($value instanceof UploadedFileInterface) {
|
||||
$normalized[$key] = $value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_array($value) && isset($value['tmp_name']) && is_array($value['tmp_name'])) {
|
||||
$normalized[$key] = $normalizeUploadedFileSpecification($value);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_array($value) && isset($value['tmp_name'])) {
|
||||
$normalized[$key] = createUploadedFile($value);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_array($value)) {
|
||||
$normalized[$key] = normalizeUploadedFiles($value);
|
||||
continue;
|
||||
}
|
||||
|
||||
throw new InvalidArgumentException('Invalid value in files specification');
|
||||
}
|
||||
return $normalized;
|
||||
}
|
||||
41
vendor/zendframework/zend-diactoros/src/functions/parse_cookie_header.php
vendored
Normal file
41
vendor/zendframework/zend-diactoros/src/functions/parse_cookie_header.php
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
/**
|
||||
* @see https://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros;
|
||||
|
||||
use function preg_match_all;
|
||||
use function urldecode;
|
||||
|
||||
/**
|
||||
* Parse a cookie header according to RFC 6265.
|
||||
*
|
||||
* PHP will replace special characters in cookie names, which results in other cookies not being available due to
|
||||
* overwriting. Thus, the server request should take the cookies from the request header instead.
|
||||
*
|
||||
* @param string $cookieHeader A string cookie header value.
|
||||
* @return array key/value cookie pairs.
|
||||
*/
|
||||
function parseCookieHeader($cookieHeader)
|
||||
{
|
||||
preg_match_all('(
|
||||
(?:^\\n?[ \t]*|;[ ])
|
||||
(?P<name>[!#$%&\'*+-.0-9A-Z^_`a-z|~]+)
|
||||
=
|
||||
(?P<DQUOTE>"?)
|
||||
(?P<value>[\x21\x23-\x2b\x2d-\x3a\x3c-\x5b\x5d-\x7e]*)
|
||||
(?P=DQUOTE)
|
||||
(?=\\n?[ \t]*$|;[ ])
|
||||
)x', $cookieHeader, $matches, PREG_SET_ORDER);
|
||||
|
||||
$cookies = [];
|
||||
|
||||
foreach ($matches as $match) {
|
||||
$cookies[$match['name']] = urldecode($match['value']);
|
||||
}
|
||||
|
||||
return $cookies;
|
||||
}
|
||||
Reference in a new issue