Get request headers sent by client in PHP

A nice little function I found posted by “lazynitwit” on BlueHost forums:

function getHeaders()
{
$headers = array();
foreach ($_SERVER as $k => $v)
{
if (substr($k, 0, 5) == "HTTP_")
{
$k = str_replace('_', ' ', substr($k, 5));
$k = str_replace(' ', '-', ucwords(strtolower($k)));
$headers[$k] = $v;
}
}
return $headers;
}

The PHP function getallheaders() only works on Apache, and only if Apache has been installed as a module.

It turns out that this information is within the $_SERVER global variable, and can be parsed out.

This code is useful if, for instance, you want to differentiate between user browser requests and requests made through AJAX. Some of the JavaScript frameworks (jQuery, Prototype, YUI, MooTools) send a special header,

X-Requested-With: XMLHttpRequest

whenever a request is made. I have put this to use in my phpFreeChat chat box to allow channels to be specified in the URL as GET parameters.

via request headers php – bluehostforum.com.

VN:F [1.9.22_1171]
Rating: 4.4/5 (12 votes cast)
VN:F [1.9.22_1171]
Rating: +5 (from 5 votes)
Get request headers sent by client in PHP, 4.4 out of 5 based on 12 ratings

3 thoughts on “Get request headers sent by client in PHP”

  1. Hi there, thank you for this function, it has saved me a headache since I know we’re deploying to nginx so would have come up sooner or later!

    Can you touch on why tyou used ucwords(strtolower($k))? I have a header that I am expecting and am passing through (kine of a php proxy for offline web service caching) that is called “API-KEY”, and after running through this function is “Api-Key”… is the server behavior on the other end of things generally going to standardize the headers to ucwords format, or was this just a personal preference? I just want to avoid messing up the headers when passing through if the receiving end “could be” case sensitive.

    Thanks!
    Chad

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. was just about to write a function to do this, then i thought, “I might as well google it first”…

    then i found this 🙂 thanks for the great function.

    VA:F [1.9.22_1171]
    Rating: 5.0/5 (2 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  3. Awesome — clean and useful. Cheers!

    VA:F [1.9.22_1171]
    Rating: 5.0/5 (2 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

Leave a Reply