PHP 5.4.33 Released

apache_request_headers

(PHP 4 >= 4.3.0, PHP 5)

apache_request_headersFetch all HTTP request headers

Opis

array apache_request_headers ( void )

Fetches all HTTP request headers from the current request.

Zwracane wartości

An associative array of all the HTTP headers in the current request, or FALSE on failure.

Rejestr zmian

Wersja Opis
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

Informacja:

Od PHP 4.3.3 możliwe jest użycie tej funkcji przy pracy w trybie modułu NSAPI serwera także w serwerach Netscape/iPlanet/SunONE.

Przykłady

Przykład #1 apache_request_headers() example

<?php
$headers 
apache_request_headers();

foreach (
$headers as $header => $value) {
    echo 
"$header$value <br />\n";
}
?>

Powyższy przykład wyświetli coś podobnego do:

Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: www.example.com
Connection: Keep-Alive

Notatki

Informacja:

You can also get at the value of the common CGI variables by reading them from the environment, which works whether or not you are using PHP as an Apache module. Use phpinfo() to see a list of all of the available environment variables.

Zobacz też:

add a note add a note

User Contributed Notes 2 notes

up
5
callum85 at notspam dot msn dot com
7 years ago
There is a simple way to get request headers from Apache even on PHP running as a CGI. As far as I know, it's the only way to get the headers "If-Modified-Since" and "If-None-Match" when apache_request_headers() isn't available. You need mod_rewrite, which most web hosts seem to have enabled. Put this in an .htacess file in your web root:

RewriteEngine on
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]

The headers are then available in PHP as
<?php
  $_SERVER
['HTTP_IF_MODIFIED_SINCE'];
 
$_SERVER['HTTP_IF_NONE_MATCH'];
?>

I've tested this on PHP/5.1.6, on both Apache/2.2.3/Win32 and Apache/2.0.54/Unix, and it works perfectly.

Note: if you use RewriteRules already for clean URLs, you need to put the above rules AFTER your existing ones.
up
3
limalopex.eisfux.de
7 years ago
I didn't found a replacement for apache_request_headers() in PHP::Compat (http://pear.php.net/package/PHP_Compat) so I wrote my own:

<?php
if( !function_exists('apache_request_headers') ) {
///
function apache_request_headers() {
 
$arh = array();
 
$rx_http = '/\AHTTP_/';
  foreach(
$_SERVER as $key => $val) {
    if(
preg_match($rx_http, $key) ) {
     
$arh_key = preg_replace($rx_http, '', $key);
     
$rx_matches = array();
     
// do some nasty string manipulations to restore the original letter case
      // this should work in most cases
     
$rx_matches = explode('_', $arh_key);
      if(
count($rx_matches) > 0 and strlen($arh_key) > 2 ) {
        foreach(
$rx_matches as $ak_key => $ak_val) $rx_matches[$ak_key] = ucfirst($ak_val);
       
$arh_key = implode('-', $rx_matches);
      }
     
$arh[$arh_key] = $val;
    }
  }
  return(
$arh );
}
///
}
///
?>
To Top