2db4a4a0103facc62a8cde50b2cbdd2ee81a3dc2
[yaffs-website] / vendor / zendframework / zend-diactoros / src / functions / normalize_server.php
1 <?php
2 /**
3  * @see       https://github.com/zendframework/zend-diactoros for the canonical source repository
4  * @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
5  * @license   https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
6  */
7
8 namespace Zend\Diactoros;
9
10 use function is_callable;
11
12 /**
13  * Marshal the $_SERVER array
14  *
15  * Pre-processes and returns the $_SERVER superglobal. In particularly, it
16  * attempts to detect the Authorization header, which is often not aggregated
17  * correctly under various SAPI/httpd combinations.
18  *
19  * @param array $server
20  * @param null|callable $apacheRequestHeaderCallback Callback that can be used to
21  *     retrieve Apache request headers. This defaults to
22  *     `apache_request_headers` under the Apache mod_php.
23  * @return array Either $server verbatim, or with an added HTTP_AUTHORIZATION header.
24  */
25 function normalizeServer(array $server, callable $apacheRequestHeaderCallback = null)
26 {
27     if (null === $apacheRequestHeaderCallback && is_callable('apache_request_headers')) {
28         $apacheRequestHeaderCallback = 'apache_request_headers';
29     }
30
31     // If the HTTP_AUTHORIZATION value is already set, or the callback is not
32     // callable, we return verbatim
33     if (isset($server['HTTP_AUTHORIZATION'])
34         || ! is_callable($apacheRequestHeaderCallback)
35     ) {
36         return $server;
37     }
38
39     $apacheRequestHeaders = $apacheRequestHeaderCallback();
40     if (isset($apacheRequestHeaders['Authorization'])) {
41         $server['HTTP_AUTHORIZATION'] = $apacheRequestHeaders['Authorization'];
42         return $server;
43     }
44
45     if (isset($apacheRequestHeaders['authorization'])) {
46         $server['HTTP_AUTHORIZATION'] = $apacheRequestHeaders['authorization'];
47         return $server;
48     }
49
50     return $server;
51 }