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 8namespace Zend\Diactoros; 9 10use 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 */ 25function 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} 52