For apache_response_headers() working good, you need to set up output_buffering = Off in php.ini
apache_response_headers
(PHP 4 >= 4.3.0, PHP 5)
apache_response_headers — Fetch all HTTP response headers
Description
array apache_response_headers
( void
)
Fetch all HTTP response headers.
Return Values
An array of all Apache response headers on success or FALSE on failure.
Changelog
| Version | Description |
|---|---|
| 5.4.0 | This function became available under FastCGI. Previously, it was supported only when PHP was installed as an Apache module. |
| 4.3.3 |
As of PHP 4.3.3 you can use this function with the NSAPI server module in Netscape/iPlanet/SunONE webservers, too. |
Examples
Example #1 apache_response_headers() example
<?php
print_r(apache_response_headers());
?>
The above example will output something similar to:
Array
(
[Accept-Ranges] => bytes
[X-Powered-By] => PHP/4.3.8
)
See Also
- apache_request_headers() - Fetch all HTTP request headers
- headers_sent() - Checks if or where headers have been sent
- headers_list() - Returns a list of response headers sent (or ready to send)
athlet ¶
7 years ago
php at mailplus dot pl ¶
2 years ago
I get "Call to undefined function apache_response_headers()" when using php-cli so be aware of lack of this function CLI.
In my case I was trying to test my app via phpunit (command line tool of course ;)) if it sends proper headers.
Craig Harris ¶
2 years ago
Be aware that apache_response_headers() does not include all headers, notably the content-type is missing as are any headers which apache will add after the php process completes.
This is a very misleading function, but it does at least have a better output structure than the more complete headers_list() function
Isaac Z dot Schlueter i at foohack dot com ¶
3 years ago
This function doesn't exist on lighttpd, so I wrote this little function to emulate it:
<?php
if (!function_exists('apache_response_headers')) {
function apache_response_headers () {
$arh = array();
$headers = headers_list();
foreach ($headers as $header) {
$header = explode(":", $header);
$arh[array_shift($header)] = trim(implode(":", $header));
}
return $arh;
}
}
?>
Daniel Lorch ¶
5 years ago
Addendum: The code
<pre>
<?php
print_r(apache_request_headers());
?>
</pre>
gives me
Array
(
[X-Powered-By] => PHP/5.1.6
)
But the code
<pre>
<?php
ob_end_flush();
print_r(apache_request_headers());
?>
</pre>
Results in
Array
(
[Content-Location] => phpinfo.de.php
[Vary] => negotiate
[TCN] => choice
[X-Powered-By] => PHP/5.1.6
[Keep-Alive] => timeout=15, max=96
[Connection] => Keep-Alive
[Transfer-Encoding] => chunked
[Content-Type] => text/html
[Content-Language] => de
)
Daniel Lorch ¶
5 years ago
I can confirm athlet's experience with apache_response_headers() using PHP 5.1.6. When the resulting array is empty or only contains "X-Powered-By" instead of the full list of values, you'll need to switch off output_buffering _before_ the script has been executed, for example with the following directive in .htaccess:
php_value "output_buffering" "0"
it _doesn't_ work when you do a you ini_set('output_buffering', 0); in your script. Not sure why that is so - it is not a bug in PHP, but probably has to do with how Apache populates the request values.
