PHP
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

apache_reset_timeout> <apache_note
Last updated: Fri, 30 Jan 2009

view this page in

apache_request_headers

(PHP 4 >= 4.3.0, PHP 5)

apache_request_headers모든 HTTP 요청 헤더를 가져옵니다

설명

array apache_request_headers ( void )

현재 요청에서 모든 HTTP 요청 헤더를 가져옵니다.

이 함수는 PHP를 아파치 모듈로 설치하였을 때만 지원합니다.

반환값

현재 요청의 모든 HTTP 헤더에 대한 연관 배열이거나, 실패시엔 FALSE.

예제

Example #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

주의

Note: PHP 4.3.0 이전에, apache_request_headers()getallheaders()로 불리워졌습니다. PHP 4.3.0 이후의 getallheaders()apache_request_headers()의 단축형입니다.

Note: 환경 변수에서 일반 CGI 변수를 읽어서, PHP를 Apache 모듈로 사용하고 있는지를 확인할 수 있습니다. 모든 사용 가능한 환경 변수 목록은 phpinfo()를 이용해서 볼 수 있습니다.

Note: PHP 4.3.3부터 이 함수를 넷스케이프/iPlanet/SunONE 웹서버의 NSAPI 서버 모듈에서도 사용할 수 있습니다.

참고



apache_reset_timeout> <apache_note
Last updated: Fri, 30 Jan 2009
 
add a note add a note User Contributed Notes
apache_request_headers
tehjosh at gamingg dot net
30-Jul-2007 05:16
To callum85 at notspam dot msn dot com:

All of the request headers, including If-None-Match and If-Modified-Since should be available in the $_SERVER array by default.  Try running this code:

<?php
var_dump
($_SERVER);
?>

Experiment by sending different headers in the request to that script and you should see that the headers populate the $_SERVER array automatically.
callum85 at notspam dot msn dot com
19-Apr-2007 09:07
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.
tehjosh at gamingg dot net
18-Mar-2007 06:03
I wrote a function similar to jrabbit's, except that mine creates a custom function rather than redefining the original.
<?php
function request_headers()
{
    if(
function_exists("apache_request_headers")) // If apache_request_headers() exists...
   
{
        if(
$headers = apache_request_headers()) // And works...
       
{
            return
$headers; // Use it
       
}
    }

   
$headers = array();

    foreach(
array_keys($_SERVER) as $skey)
    {
        if(
substr($skey, 0, 5) == "HTTP_")
        {
           
$headername = str_replace(" ", "-", ucwords(strtolower(str_replace("_", " ", substr($skey, 0, 5)))));
           
$headers[$headername] = $_SERVER[$skey];
        }
    }

    return
$headers;
}
?>

Also, eval() is not necessary to define a function that is within an if block, as is done in jrabbit's code, because PHP will only read the function if it passes the if condition.
suso at suso dot org
18-Feb-2007 06:01
The PHP developers should not be creating functions like this that only work in the module version and not in the CGI version.  It creates situations where people who have setup special installations of PHP (like suphp) run into issues with prewritten software.  If you can't make it work with both, then don't make it work at all.
jrabbit
21-Jan-2007 03:04
The following code will implement an approximation of apache_request_headers for lighttpd making most scripts that use the function portable between the two platforms.

Caveats are:

1. This function will convert any _ in a header key to a -

2. This function will capitalize the first character and first character after each hyphen in each header key and lower case the rest of the key.

This does not cause a problem with standard headers which are capitalized in this manner but may cause custom headers to appear in a different case to apache.

if (!function_exists('apache_request_headers')) {
    eval('
        function apache_request_headers() {
            foreach($_SERVER as $key=>$value) {
                if (substr($key,0,5)=="HTTP_") {
                    $key=str_replace(" ","-",ucwords(strtolower(str_replace("_"," ",substr($key,5)))));
                    $out[$key]=$value;
                }
            }
            return $out;
        }
    ');
}
limalopex.eisfux.de
29-Oct-2006 07:01
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 );
}
///
}
///
?>
php [at] barryhunter [.] co [.] uk
09-Sep-2005 02:00
Surly this could be rewritten as

function list_dirs($path, $target)
{
   $list = scandir($path);
   $url = $_SERVER['HTTP_HOST'];
     
   foreach ($list as $number => $filename)
   {
       if ( $filename !== '.' && $filename !== '..' && !is_file($filename) )
       {
           if ($target == '')
           {
               // Print Dirs with link
               print ("<a href=\"http://$url/$filename\">$filename</a> <br>\n");
           }
           else
           {
               // Print Dirs with link
               print ("<a href=\"http://$url/$filename\" target=\"$target\">$filename</a> <br>\n");
           }
              
       }
   }
}

which would then not require apache. I havent tested this but looks to do exactly the same.
renich at woralelandia dot com
21-Apr-2005 08:50
Here is a simple listing function. It accepts a path and target. Examples listed bellow

function list_dirs($path, $target)
{
    $list = scandir($path);
   
    foreach ($list as $number => $filename)
    {
        if ( $filename !== '.' && $filename !== '..' && !is_file($filename) )
        {
            // Asign more readable and logic variables
            $dir = $filename;
            $url = apache_request_headers();
           
            if ($target == '')
            {
                // Print Dirs with link
                print ("<a href=\"http://$url[Host]/$dir\">$dir</a> <br>\n");
            }
            else
            {
                // Print Dirs with link
                print ("<a href=\"http://$url[Host]/$dir\" target=\"$target\">$dir</a> <br>\n");
            }
               
        }
    }
}

Examples:

1.- List actual dir with no target option

<?php

list_dirs
('.', '');

?>

2.- List "mydir" with a "_blank" as target name

<?php

list_dirs
('/home/renich/www/mydir', '_blank')

?>

Notes:
- Its a simple function and it uses a function that interacts with apache. I don't know what will happen if you request a file list of a directory outside of the apache realm!
- Not fully tested!

apache_reset_timeout> <apache_note
Last updated: Fri, 30 Jan 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites