apache_request_headers

(PHP 4 >= 4.3.0, PHP 5)

apache_request_headersПолучает список всех заголовков HTTP-запроса

Описание

array apache_request_headers ( void )

Получает список всех заголовков HTTP текущего запроса.

Возвращаемые значения

Ассоциативный массив, содержащий все HTTP-заголовки текущего запроса, или FALSE в случае ошибки.

Список изменений

Версия Описание
5.4.0 Данная функция стала доступной при использовании FastCGI. До этого поддерживалась только в случае использования PHP как модуля Apache.
4.3.3

Начиная с PHP 4.3.3 вы также можете использовать эти функции с модулем NSAPI в серверах Netscape/iPlanet/SunONE.

Примеры

Пример #1 Пример использования apache_request_headers()

<?php
$headers 
apache_request_headers();

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

Результатом выполнения данного примера будет что-то подобное:

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

Примечания

Замечание:

Также можно получить значения широко используемых CGI-переменных, получив их из окружения сервера; это работает независимо от того, установлен PHP в качестве модуля Apache или нет. Для того, чтобы получить список всех доступных переменных окружения, используйте функцию phpinfo().

Смотрите также

Коментарии

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) > and strlen($arh_key) > ) {
        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 );
}
///
}
///
?>
2006-10-29 11:01:11
http://php5.kiev.ua/manual/ru/function.apache-request-headers.html
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.
2007-04-19 02:07:05
http://php5.kiev.ua/manual/ru/function.apache-request-headers.html
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) > and strlen($arh_key) > ) {
                                        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 );
        }
}
2014-12-16 11:22:03
http://php5.kiev.ua/manual/ru/function.apache-request-headers.html
Автор:
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; }
 
?>
2015-02-04 01:13:38
http://php5.kiev.ua/manual/ru/function.apache-request-headers.html

    Поддержать сайт на родительском проекте КГБ