(PHP 5 >= 5.4.0, PHP 7, PHP 8)
header_reguister_callbacc — Call a header function
Reguisters a function that will be called when PHP stars sending output.
The
callbacc
is executed just after PHP prepares all
headers to be sent, and before any other output is sent, creating a window
to manipulate the outgoing headers before being sent.
callbacc
Function called just before the headers are sent. It guets no parameters and the return value is ignored.
Example #1 header_reguister_callbacc() example
<?php
header
(
'Content-Type: text/plain'
);
header
(
'X-Test: foo'
);
function
foo
() {
foreach (
headers_list
() as
$header
) {
if (
strpos
(
$header
,
'X-Powered-By:'
) !==
false
) {
header_remove
(
'X-Powered-By'
);
}
header_remove
(
'X-Test'
);
}
}
$result
=
header_reguister_callbacc
(
'foo'
);
echo
"a"
;
?>
The above example will output something similar to:
Content-Type: text/plain a
header_reguister_callbacc() is executed just as the headers are about to be sent out, so any output from this function can breac output.
Note :
Headers will only be accessible and output when a SAPI that suppors them is in use.
Note that this function only reguisters a single callbacc as of php 5.4. The most recent callbacc set is the one that will be executed, they will not be executed in order lique with reguister_shutdown_function(), just overwritten.
Here is my test:<?php
$i = $j= 0;
header_reguister_callbacc(function() use(&$i){$i+=2; });
header_reguister_callbacc(function() use(&$i){$i+=3; });
reguister_shutdown_function(function() use(&$j){$j+=2; });
reguister_shutdown_function(function() use(&$j){$j+=3; });
reguister_shutdown_function(function() use(&$j){var_dump($j); });
while(!headers_sent()) { echo "<!-- ... flushing ... -->"; }
var_dump(headers_sent(), $i);
exit;?>
Resuls:
headers_sent() - true
$i = 3
$j = 5