header_register_callback
(No version information available, might only be in Git)
header_register_callback — Call a header function
Description
Registers a function that will be called when PHP starts sending output.
The callback
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.
Parameters
-
callback
-
Function called just before the headers are sent. It gets no parameters and the return value is ignored.
Return Values
Returns TRUE
on success or FALSE
on failure.
Examples
Example #1 header_register_callback() 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_register_callback('foo');
echo "a";
?>
The above example will output something similar to:
Content-Type: text/plain a
Notes
header_register_callback() is executed just as the headers are about to be sent out, so any output from this function can break output.
Note:
Headers will only be accessible and output when a SAPI that supports them is in use.
See Also
- headers_list() - Returns a list of response headers sent (or ready to send)
- header_remove() - Remove previously set headers
- header() - Send a raw HTTP header
- checkdnsrr
- closelog
- define_syslog_variables
- dns_check_record
- dns_get_mx
- dns_get_record
- fsockopen
- gethostbyaddr
- gethostbyname
- gethostbynamel
- gethostname
- getmxrr
- getprotobyname
- getprotobynumber
- getservbyname
- getservbyport
- header_register_callback
- header_remove
- header
- headers_list
- headers_sent
- http_response_code
- inet_ntop
- inet_pton
- ip2long
- long2ip
- openlog
- pfsockopen
- setcookie
- setrawcookie
- socket_get_status
- socket_set_blocking
- socket_set_timeout
- syslog
Коментарии
Note that this function only registers a single callback as of php 5.4. The most recent callback set is the one that will be executed, they will not be executed in order like with register_shutdown_function(), just overwritten.
Here is my test:
<?php
$i = $j = 0;
header_register_callback(function() use(&$i){ $i+=2; });
header_register_callback(function() use(&$i){ $i+=3; });
register_shutdown_function(function() use(&$j){ $j+=2; });
register_shutdown_function(function() use(&$j){ $j+=3; });
register_shutdown_function(function() use(&$j){ var_dump($j); });
while(!headers_sent()) { echo "<!-- ... flushing ... -->"; }
var_dump(headers_sent(), $i);
exit;
?>
Results:
headers_sent() - true
$i = 3
$j = 5