2024年PHP开发者大会日本站

header_remove

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

header_remove移除之前设置的报头

描述

header_remove(?string $name = null): void

移除之前使用 header() 设置的HTTP报头。

参数

name

要移除的报头名称。当为 null 时,将移除所有之前设置的报头。

注意: 此参数不区分大小写。

返回值

不返回任何值。

变更日志

版本 描述
8.0.0 name 现在可以为空。

示例

示例 #1 移除特定报头。

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

以上示例将输出类似于以下内容

X-Bar: Baz

示例 #2 移除所有之前设置的报头。

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

以上示例将输出类似于以下内容


注释

警告

此函数将移除PHP设置的 *所有* 报头,包括Cookie、会话和X-Powered-By报头。

注意:

只有在使用支持报头的SAPI时,才能访问和输出报头。

参见

添加注释

用户贡献的注释 4条注释

Saeed Khamseh
13年前
如果您想移除关于PHP版本的报头信息(x-powered-by),您可以使用

header_remove('x-powered-by');

或者,如果您没有安装PHP 5.3,您可以使用“header”命令执行相同的操作

header('x-powered-by:');

不要忘记字符串末尾的“:”字符!
匿名用户
9年前
expose_php 仅在 php.ini 中生效!

这不起作用
ini_set('expose_php',0);

有效
header_remove('x-powered-by');
luis dot angelino at laweb dot com dot br
6个月前
如果您使用的是

#!/usr/local/bin/php

您可以在其末尾添加“-q”,报头将被移除,因为header_remove不会移除“Content-type”

#!/usr/local/bin/php -q
jake at qzdesign dot co dot uk
6年前
从命令行进程调用时,此函数在传递特定要移除的报头时什么也不做,但是当调用时不带任何参数以移除所有报头时,它仍然可以正常工作。

因此,在单元测试或在某些其他测试工具中执行时,如果要测试的代码可能会调用`header_remove()`,并且加载了UOPZ和XDebug扩展,则可以使用以下代码更有效地测试是否设置了预期的报头[您可以通过在运行测试代码后检查`xdebug_get_headers()`返回的数组来执行此操作,因为尽管报头实际上是正常存储在内部的,但`headers_list()`不起作用]

<?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);
}
);
}
// 这可以移除所有报头,只是不能移除单个报头。
header_remove();
if (
$name !== null) {
foreach (
$headers as $header) {
header($header);
}
}
},
true
);
?>
To Top