php在nginx下不支持getallheaders()函数的解决办法

getallheaders函数只有在Apache下才支持的函数,所以在在非apache网站环境下就会报错,兼容写法参考如下代码函数:

//来源于https://github.com/ralouphie/getallheaders
if (!function_exists('getallheaders')) {    
    /**    
     * Get all HTTP header key/values as an associative array for the current request.    
     *    
     * @return string[string] The HTTP header key/value pairs.    
     */    
    function getallheaders()    
    {    
        $headers = array();    
        $copy_server = array(    
            'CONTENT_TYPE'   => 'Content-Type',    
            'CONTENT_LENGTH' => 'Content-Length',    
            'CONTENT_MD5'    => 'Content-Md5',    
        );    
        foreach ($_SERVER as $key => $value) {    
            if (substr($key, 0, 5) === 'HTTP_') {    
                $key = substr($key, 5);    
                if (!isset($copy_server[$key]) || !isset($_SERVER[$key])) {    
                    $key = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key))));    
                    $headers[$key] = $value;    
                }    
            } elseif (isset($copy_server[$key])) {    
                $headers[$copy_server[$key]] = $value;    
            }    
        }    
        if (!isset($headers['Authorization'])) {    
            if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {    
                $headers['Authorization'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];    
            } elseif (isset($_SERVER['PHP_AUTH_USER'])) {    
                $basic_pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';    
                $headers['Authorization'] = 'Basic ' . base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $basic_pass);    
            } elseif (isset($_SERVER['PHP_AUTH_DIGEST'])) {    
                $headers['Authorization'] = $_SERVER['PHP_AUTH_DIGEST'];    
            }    
        }    
        return $headers;    
    }    
}

一些网站上面发现的getallheaders函数简单写法

if (! function_exists ( 'getallheaders' )) {
   function getallheaders() {
      foreach ( $_SERVER as $name => $value ) {
         if ($name == 'HTTP_X_CALL') {
            $headers ['x-call'] = $value;
         } elseif ($name == 'HTTP_X_FORM_CALL') {
            $headers ['x-form-call'] = $value;
         } elseif (substr ( $name, 0, 5 ) == 'HTTP_') {
            $headers [str_replace ( ' ', '-', ucwords ( strtolower ( str_replace ( '_', ' ', substr ( $name, 5 ) ) ) ) )] = $value;
         }
      }
      return $headers;
   }
}

 

原创文章,作者:管理员,如若转载,请注明出处:http://www.bajiege.com/archives/942.html

(2)
上一篇 2019年8月8日
下一篇 2019年10月11日

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据