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

    (PHP 5 >= 5.3.0, PHP 7)

    删除之前设置的 HTTP 头

    说明

    header_remove([string $name]): void

    删除之前用header()设置的 HTTP 头。

    参数

    $name

    要移除的头名称。

    Note:参数不分大小写。

    返回值

    没有返回值。

    范例

    取消指定的头

    <?php
    header("X-Foo: Bar");
    header("X-Bar: Baz");
    header_remove("X-Foo"); 
    ?>
    

    以上例程的输出类似于:

    X-Bar: Baz
    

    取消之前全部指定的头

    <?php
    header("X-Foo: Bar");
    header("X-Bar: Baz");
    header_remove(); 
    ?>
    

    以上例程的输出类似于:

    注释

    Caution

    本函数会删除所有PHP 设置的头,包括 Cookie、Session 和X-Powered-By

    Note:

    数据头只会在SAPI支持时得到处理和输出。

    参见

    if you want to remove header information about php version (x-powered-by), you can use:
    header_remove('x-powered-by');
    alternatively, if you don't have php 5.3 installed, you can do the same thing using "header" command:
    header('x-powered-by:');
    don't forget the ':' character at the end of the string!
    expose_php is php.ini only!
    this won't work:
    ini_set('expose_php',0);
    works:
    header_remove('x-powered-by');
    When called from a command-line process, this function does nothing when passed a specific header to remove, but it does nonetheless work properly when called with no arguments to remove all headers.
    Thus, when unit-testing or executing in some other test harness, if the code you are testing may call `header_remove()`, with the UOPZ and XDebug extensions loaded, you could use the following in order to more effectively test that the expected headers are set [which you would do by inspecting the array returned by `xdebug_get_headers()` after running the code under test, as `headers_list()` does not work despite the headers actually being stored internally as normal]:
    <?php
    uopz_set_return(
     'header_remove',
     function($name = null) {
      if ($name !== null) {
       $pattern = '/^' . preg_quote($name, '/') . ':/i';
       $headers = array_filter(
        xdebug_get_headers(),
        function($header) use($pattern) {
         return !preg_match($pattern, $header);
        }
       );
      }
      // This works to remove all headers, just not individual headers.
      header_remove();
      if ($name !== null) {
       foreach ($headers as $header) {
        header($header);
       }
      }
     },
     true
    );
    ?>
    
    You should ini_set("expose_php", 0); or set it in your php.ini to Off, instead of using this to remove X-Powered-By header.