2010-06-07 24 views
0

我正在嘗試將一些第三方跟蹤代碼集成到我的網站之一,但它是拋出一些錯誤,並且他們的支持沒有多大用處,所以我想要嘗試自己修復他們的代碼。最讓我有固定的,但是這個功能是給我的問題:X轉發 - 爲PHP中導致未定義的索引

private function getXForwardedFor() 
{ 
$s =& $this; 

$xff_ips = array(); 

$headers = $s->getHTTPHeaders(); 

if ($headers['X-Forwarded-For']) { 
$xff_ips[] = $headers['X-Forwarded-For']; 
} 

if ($_SERVER['REMOTE_ADDR']) { 
$xff_ips[] = $_SERVER['REMOTE_ADDR']; 
} 

return implode(', ', $xff_ips); // will return blank if not on a web server 
} 

在我的開發環境在那裏我顯示所有的錯誤我得到:1129

Notice: Undefined index: X-Forwarded-For in /sites/webs/includes/OmnitureMeasurement.class.php on line 1129 

線路是:

if ($headers['X-Forwarded-For']) { 

如果我打印出$標題,我會得到:

Array 
(
[Host] => www.domain.com 
[User-Agent] => Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 
[Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
[Accept-Language] => en-gb,en;q=0.5 
[Accept-Encoding] => gzip,deflate 
[Accept-Charset] => ISO-8859-1,utf-8;q=0.7,*;q=0.7 
[Keep-Alive] => 115 
[Connection] => keep-alive 
[Referer] => http://www10.toptable.com/ 
[Cookie] => PHPSESSID=nh9jd1ianmr4jon2rr7lo0g553; __utmb=134653559.30.10.1275901644; __utmc=134653559 
[Cache-Control] => max-age=0 
) 

我看不到X-Forwarded-For在那裏,我認爲是造成問題。有什麼我應該添加到功能考慮到這一點?

我在Fedora

回答

6

使用PHP 5.3和Apache 2這是不是一個真正的大問題,但好還是固定。它抱怨你試圖訪問不存在的數組鍵。 (即使查詢使用if該鍵的陣列被認爲是訪問。)

變化

if ($headers['X-Forwarded-For']) 
    { $xff_ips[] = $headers['X-Forwarded-For']; } 

if (array_key_exists('X-Forwarded-For', $headers)) 
    { $xff_ips[] = $headers['X-Forwarded-For']; } 
+0

和再見錯誤消息。非常感謝。 (只要它讓我接受!) – 2010-06-07 13:22:51

0

甚至比array_key_exists更好是isset因爲後者是一個語言結構(執行更快),並可用於各種變量。將它作爲一個例程來檢查你不確定的變量是否在嘗試從它們讀取之前設置。

+0

哇,爲什麼反對票? :o – 2010-06-07 14:11:21

+0

在測試數組時,有*是* array_key_exists對於isset的說話,但是我不能記住我現在的生活。儘管如此,這是正確的,好的一點,絕對不值得讚賞。 +1 – 2010-06-07 14:38:49

+1

@pekka:isset()返回false是鍵存在,但有一個空值。 array_key_exists不。但是,從5.3開始,array_key_exists不再適用於對象 – 2010-06-07 22:20:37