2011-06-03 100 views
2

我目前正在開發一個營銷模塊,用於跟蹤將流量帶入我們網站的網站。有沒有辦法獲得域名或I.P.使用PHP引用網站的地址?我相信HTTP_REFERER並不總是出現在$ _SERVER全局中。確定I.P.引薦網站地址

謝謝先進。

回答

9

HTTP_REFERER頭必須由客戶端瀏覽器發送。你不能依靠它被髮送。

方案時,它不會發送包括:

  • 用戶打開一個鏈接在大的電子郵件客戶端的一個

    • 用戶輸入用手地址誰go through great lengths to obscure the REFERER
    • 用戶的瀏覽器被配置爲阻止所述網址標頭(罕見)
    • 用戶被交換協議(即,在一個HTTP站點指向HTTPS一個,或者反之亦然的鏈接)

    在這些情況下,你無能爲力。

    但是如果你控制鏈接的網站,你可以的GET參數添加引用ID的鏈接:

    http://example.com/?from=mysite 
    

    然後你可以分析你的腳本from參數。

    將referrer字符串轉換爲IP通常不是一個好主意,因爲看到儘可能多的IP地址可以承載數十或數百個站點。區別哪個用戶來自哪個站點將會以這種方式丟失。

  • +0

    正如我所懷疑的。謝謝! Upped +並被接受! – 2011-06-03 09:16:19

    4

    引用地址出現在來自所有協作瀏覽器的請求頭中,其中存在引薦者。如果用戶只是輸入了你的網址,那麼就沒有引用者。

    這是一個微不足道的設計問題向URL轉換成IP地址:

    <?php 
    $raddr = gethostbyaddr($_SERVER['HTTP_REFERER']); 
    
    ?> 
    
    +0

    「瑣碎的編程問題」實際上是一個問題。 – DOK 2011-06-03 08:46:47

    +0

    @DOK我不認爲OP真的想要這個。將主機名轉換爲IP地址是一個可怕的想法(因爲您有效地銷燬了用戶來自哪個站點的信息)。 – 2011-06-03 08:49:02

    +0

    @Pekka,它實際上很重要因爲我需要從發起網站的IP地址獲得國家:D – 2011-06-03 09:15:16

    2

    如果HTTP_REFERER沒有在服務器出現,則該用戶沒有通過鏈接進入您的網站,或者他有一種通過瀏覽器屏蔽該變量的方法。沒有其他的事情可以做。

    2

    如果它沒有顯示在$ _SERVER中,通常意味着客戶端沒有發送它。引薦來源是不可信的數據,因爲它完全取決於用戶(更具體地說是他們的瀏覽器)。

    最好的辦法是檢查引用者是否在那裏,然後使用域上的gethostbyname()函數來獲得你想要的IP。

    http://php.net/manual/en/function.gethostbyname.php