apache_request_headers

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

apache_request_headersTüm HTTP istek başlıklarını alır

Açıklama

apache_request_headers ( ) : array

Geçerli istekteki HTTP istek başlıklarının tümünü alır. Apache, FastCGI, CLI ve FPM http sunucularında çalışır.

Dönen Değerler

Başarı halinde mevcut isteğin tüm HTTP başlıklarını içeren bir ilişkili dizi döndürür; aksi halde false döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
7.3.0 Bu işlev FPM SAPI ile kullanılabilir hale geldi.

Örnekler

Örnek 1 - apache_request_headers() örneği

<?php
$headers 
apache_request_headers();

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

Yukarıdaki örnek şuna benzer bir çıktı üretir:

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

Notlar

Bilginize:

PHP'yi bir Apache modülü olarak kullansanız da kullanmasanızda genel CGI değişkenlerini çevre değişkenlerini okuyarak da alabilirsiniz. Kullanılabilir ortam değişkenlerinin listesini almak için phpinfo() işlevini kullanabilirsiniz.

Ayrıca Bakınız

add a note add a note

User Contributed Notes 5 notes

up
16
limalopex.eisfux.de
14 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 );
}
///
}
///
?>
up
6
Tel
1 year ago
Although we expect to see headers in mixed case, the standard RFC2616 demands that "field names are case-insensitive". PHP delivers the headers exactly untouched in whatever way the client sent them. Potentially you should expect to get any type of uppercase or lowercase or mixed.

Thus, if you want to be standards compliant, you must loop through every key and check it in a case-insensitive manner, instead of doing the obvious thing and using the name of the header as an array index.
up
9
callum85 at notspam dot msn dot com
13 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
6
egocentryk
6 years ago
Superglobal $_SERVER,  used in all patches for missing getallheaders() contains only truly basic headers.  To pass ANY header into PHP in any httpd environment, including CGI/FCGI just add rule (any number of rules) into .htaccess:

RewriteRule .* - [E=HTTP_MY_HEADER:%{HTTP:My-Header}]

and the header with it's value will appear for PHP as
<?php print $_SERVER['HTTP_MY_HEADER']; ?>

And... just couldn't hold off. Rewrtiting $_SERVER keys for replacing missing function really does not require RegExps, preg_matches or evals... Try this:
<?php
function getallheaders() {
  foreach(
$_SERVER as $K=>$V){$a=explode('_' ,$K);
      if(
array_shift($a)=='HTTP'){
          
array_walk($a,function(&$v){$v=ucfirst(strtolower($v));});
      
$retval[join('-',$a)]=$V;}
    } return
$retval; }
?>
up
-8
uli dot staerk at globalways dot net
6 years ago
A slightly modified version from  limalopex.eisfux.de. Fixes the missing Headers Content-Type and Content-Length and makes it Camel-Case.

<?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('_', strtolower($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;
                        }
                }
                if(isset(
$_SERVER['CONTENT_TYPE'])) $arh['Content-Type'] = $_SERVER['CONTENT_TYPE'];
                if(isset(
$_SERVER['CONTENT_LENGTH'])) $arh['Content-Length'] = $_SERVER['CONTENT_LENGTH'];
                return(
$arh );
        }
}
To Top