PHP 5.4.31 Released


(PHP 4 >= 4.3.0, PHP 5)

apache_request_headersRécupère tous les en-têtes HTTP de la requête


array apache_request_headers ( void )

Récupère tous les en-têtes HTTP de la requête courante.

Valeurs de retour

Un tableau associatif avec tous les en-têtes HTTP de la requête courante ou FALSE en cas d'échec.


Version Description
5.5.7 Cette fonction devient disponible pour le serveur CLI.
5.4.0 Cette fonction devient disponible pour FastCGI. Précédemment, elle n'était disponible que lorsque PHP était installé comme module Apache.

Depuis PHP 4.3.3, vous pouvez utiliser cette fonction avec le module NSAPI des serveurs Netscape/iPlanet/SunONE.


Exemple #1 Exemple avec apache_request_headers()


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

L'exemple ci-dessus va afficher quelque chose de similaire à :

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



Vous pouvez aussi obtenir les valeurs des variables CGI communes en les lisant dans l'environnement, ce qui fonctionne, que vous soyez ou non en module Apache. Utilisez la fonction phpinfo() pour connaître la liste des variables d'environnement disponibles.

Voir aussi

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
1 day 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