I am currently working on a marketing module that keeps track of sites that brings traffic to our site. Is there a way to get the domain or I.P. address of the referring site using PHP? I believe HTTP_REFERER does not always show up on the $_SERVER global.
Thanks in advanced.
You can determine the reffering URL with
$_SERVER['HTTP_REFERER']
but bear in mind this can be manipulated.You can then use
gethostbyname($referrer)
to get the IP address.See: http://php.net/manual/en/reserved.variables.server.php and http://php.net/manual/en/function.gethostbyname.php
The
HTTP_REFERER
header has to be sent by the client's browser. You can't rely on it being sent.Scenarios when it does not get sent include:
In those cases, there is nothing you can do.
If you control the linking site however, you could add a referrer ID in the GET parameter to the link:
you could then parse the
from
parameter in your script.Converting the referrer string to an IP usually not a good idea, seeing as many IP addresses host dozens or hundreds of sites. The distinction which site the user came from will be lost that way.
If it does not show up in $_SERVER it usually means the client is not sending it. The referrer is data that cannot be trusted for accuracy as it is entirely up to the user (more specifically their browser).
Your best bet is to check if the referer is there, then use the gethostbyname() function on the domain to get the IP you want.
http://php.net/manual/en/function.gethostbyname.php
The referring address is present in the request header from all cooperating browsers for which there is a referrer. If the user just typed in your URL, then there is no referrer.
It is a trivial programming matter to convert the URL into an IP address:
If HTTP_REFERER does not show up in server, then that user did not enter your site by a link, or he has a way to mask that variable via his browser. Not much else you can do.