(PHP 5 >= 5.3.0, PHP 7, PHP 8)
header_remove — Удаляет ранее установленные заголовки
Удаляет предварительно установленный функцией header() HTTP-заголовок.
name
Имя удаляемого заголовка. Если null , удаляются все ранее установленные заголовки.
Замечание: Это регистронезависимый параметр.
Функция не возвращает значения после выполнения.
| Версия | Описание |
|---|---|
| 8.0.0 |
name теперь допускает значение null.
|
Пример #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, включая cookies, сессию и заголовки X-Powered-By.
Замечание: Заголовки доступны и выводятся, только если PHP работает через 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');If you are using this:
#!/usr/local/bin/php
You can add "-q" at the end of it and the headers will be removed, beacuse header_remove will not remove "Content-type"
#!/usr/local/bin/php -q<?php
header_remove('Server');
phpinfo();
?>
In Apache php 8.5.6 it will only delete in the HTTP Headers Information section but the header is sent by Apache and cannot be override by php.
You can find it in the browser console, in the network section.
So you will need other various methods..
https://stackoverflow.com/questions/9000853/apache-how-to-hide-server-version-and-operation-system-from-users 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
);
?>