• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • getallheaders()

    (PHP 4, PHP 5, PHP 7)

    获取全部 HTTP 请求头信息

    说明

    getallheaders(void): array

    获取当前请求的所有请求头信息。

    此函数是apache_request_headers()的别名。请阅读apache_request_headers()文档获得更多信息。

    返回值

    包含当前请求所有头信息的数组,失败返回FALSE

    更新日志

    版本说明
    5.5.7此函数可用于 CLI server。
    5.4.0此函数可用于 FastCGI。此前仅在PHP以 Apache 模块方式运行时支持。
    4.3.3

    从PHP 4.3.3 起,也可在 Netscape/iPlanet/SunONE Web 服务器的NSAPI 服务器模块使用此函数。

    4.3.0被改名而成为apache_request_headers()的别名。因为此函数仅适用于 Apache 。

    范例

    getallheaders()示例

    <?php
    foreach (getallheaders() as $name => $value) {
        echo "$name: $value\n";
    }
    ?>
    

    参见

    it could be useful if you using nginx instead of apache
    <?php
    if (!function_exists('getallheaders')) 
    {
      function getallheaders() 
      {
          $headers = [];
        foreach ($_SERVER as $name => $value) 
        {
          if (substr($name, 0, 5) == 'HTTP_') 
          {
            $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
          }
        }
        return $headers;
      }
    }
    ?>
    
    There's a polyfill for this that can be downloaded or installed via composer:
    https://github.com/ralouphie/getallheaders
    Beware that RFC2616 (HTTP/1.1) defines header fields as case-insensitive entities. Therefore, array keys of getallheaders() should be converted first to lower- or uppercase and processed such.
    dont forget to add the content_type and content_lenght if your are uploading file:
    <?php
     function emu_getallheaders() {
        foreach ($_SERVER as $name => $value) 
        {
          if (substr($name, 0, 5) == 'HTTP_') 
          {
            $name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))));
            $headers[$name] = $value;
          } else if ($name == "CONTENT_TYPE") {
            $headers["Content-Type"] = $value;
          } else if ($name == "CONTENT_LENGTH") {
            $headers["Content-Length"] = $value;
          } 
        }
        return $headers;
      }
    ?>
    chears magno c. heck
    Due to the else part.
    }else{ 
              $out[$key]=$value; 
    All server Variables are added to the headers list, and that's not the desired outcome.
    apache_request_headers replicement for nginx
    <?php
    if (!function_exists('apache_request_headers')) { 
        function apache_request_headers() { 
          foreach($_SERVER as $key=>$value) { 
            if (substr($key,0,5)=="HTTP_") { 
              $key=str_replace(" ","-",ucwords(strtolower(str_replace("_"," ",substr($key,5))))); 
              $out[$key]=$value; 
            }else{
              $out[$key]=$value; 
        }
          } 
          return $out; 
        } 
    }
    ?>
    

    上篇:apache_setenv()

    下篇:virtual()