PHP 5.6.0RC3 is available


(PHP 4 >= 4.3.0, PHP 5)

apache_request_headersObtiene todas las cabeceras HTTP


array apache_request_headers ( void )

Obtiene todas las cabeceras de petición HTTP de la llamada actual.

Valores devueltos

Devuelve un array asociativo de todas las cabeceras HTTP en la petición actual, o FALSE en caso de fallo.

Historial de cambios

Versión Descripción
5.4.0 Esta función está disponible sobre FastCGI. Anteriormente, sólo estaba soportada cuando PHP se instalaba como módulo de Apache.

A partir de PHP 4.3.3 también se puede usar esta función con el módulo de servidor NSAPI en los navegadores Netscape/iPlanet/SunONE.


Ejemplo #1 Ejemplo de apache_request_headers()


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

El resultado del ejemplo sería algo similar a:

Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Connection: Keep-Alive



También se puede obtener el valor de las variables CGI comunes a partir de las variables de entorno, lo cual funciona independientemente de que se esté utilizando PHP como un módulo de Apache. Use phpinfo() para ver la lista de todas las variables de entorno disponibles.

Ver también

add a note add a note

User Contributed Notes 3 notes

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

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.
7 years ago
I didn't found a replacement for apache_request_headers() in PHP::Compat ( so I wrote my own:

if( !function_exists('apache_request_headers') ) {
function apache_request_headers() {
$arh = array();
$rx_http = '/\AHTTP_/';
$_SERVER as $key => $val) {
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);
count($rx_matches) > 0 and strlen($arh_key) > 2 ) {
$rx_matches as $ak_key => $ak_val) $rx_matches[$ak_key] = ucfirst($ak_val);
$arh_key = implode('-', $rx_matches);
$arh[$arh_key] = $val;
$arh );
bindu at ksimple dot org
3 days ago
I used apache_request_headers in a cli server and it returns a wired array which contains duplicated key names in the array and it split one header into two part. I got the second part when I'm using the following code piece:

$header = apache_request_headers ();

What happened for this API? Is this a known issue?
To Top