天天看點

從Yii2和TP5中看PHP如何擷取所有請求頭

内容目錄

Yii2 擷取所有請求頭Thinkphp5擷取所有請求頭擷取請求頭的函數

Yii2 擷取所有請求頭

public function getHeaders()
    {
        $headers = [];
        if (function_exists('getallheaders')) {
            $headers = getallheaders();

        } elseif (function_exists('http_get_request_headers')) {
            $headers = http_get_request_headers();

        } else {
            foreach ($_SERVER as $name => $value) {
                if (strncmp($name, 'HTTP_', 5) === 0) {
                    $name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))));
                    $headers[$name] = $value;
                }
            }
        }
        return $headers;
    }
           

複制

Yii2中采用了兩個函數

getallheaders

http_get_request_headers

嘗試擷取請求頭。

getallheaders

函數是函數

apache_request_headers

的别名。如果函數不存在,再通過_SERVER擷取。_SERVER擷取請求頭,将下劃線轉換成中劃線,首字母大寫的請求頭。

Thinkphp5擷取所有請求頭

public function getHeaders()
    {
        $headers = [];
        if (function_exists('apache_request_headers') && $result = apache_request_headers()) {
            $headers = $result;
        } else {
            foreach ($_SERVER as $key => $val) {
                if (0 === strpos($key, 'HTTP_')) {
                    $key          = str_replace('_', '-', strtolower(substr($key, 5)));
                    $headers[$key] = $val;
                }
            }

        }
        $headers = array_change_key_case($headers);
    }
           

複制

Thinkphp5中采用了兩個函數

apache_request_headers

嘗試擷取請求頭。如果函數不存在,再通過_SERVER擷取。_SERVER擷取請求頭,将下劃線轉換成中劃線,小寫字母請求頭。

擷取請求頭的函數

  • apache_request_headers函數是Apache下才支援的函數。NGINX不支援!!
  • http_get_request_headers,函數依賴PECL pecl_http >= 0.10.0