2016-07-20 108 views
1

我正在看一箇舊的腳本。 我發現了一個代號:

ereg($self_name, $HTTP_REFERER) 

能否在代碼更改爲下面的代碼?:

if(isset($_SERVER['HTTP_REFERER'])) 

或將其更改爲

preg_match("%$self_name%", $HTTP_REFERER) 

是什麼$HTTP_REFERER$_SERVER['HTTP_REFERER']之間的區別?

注:

//Site name for security checks: 
$self_name = '.*'; 
+6

老'$ HTTP_ *'瓦爾已過時,不應再使用。它們是早期PHP時代的遺物,並已被各種$ _WHATEVER超全球植物所取代。主要差異(超越名稱)是$ HTTP變量不是超全局的 - 它們只存在於PHP的頂級範圍。 –

+1

謝謝,我得到了我的答案。你能告訴我關於第一個問題嗎? –

+2

'ereg'也被棄用,不應使用。 – Martin

回答

1

ereg()$HTTP_REFERER都取消,不應再使用。相反,你可以使用:

preg_match("%$self_name%", $_SERVER['HTTP_REFERER']) 

需要注意的是:如果

引薦設置或不
if(isset($_SERVER['HTTP_REFERER'])) 

只檢查,但

preg_match("%$self_name%", $HTTP_REFERER) 

檢查,如果引用者是在$self_name與否。

1

$HTTP_REFERER$ereg是從最新的,PHP4遺留下來的,他們是在PHP7 REMOVED棄用爲PHP5和

ereg($self_name, $HTTP_REFERER) 

我可以更改代碼下面的代碼?:

if(isset($_SERVER['HTTP_REFERER'])) 

此檢查$self_name是在參考URI。

幾點需要注意:

  • $_SERVER['HTTP_REFERER']是PHP5,老$HTTP_值PHP7 + equivilant。

  • $_SERVER['HTTP_REFERER']通常沒有設置或者最多可能是不可靠的,因此不應該信任任何遠程關鍵代碼決策。

  • 如果你想檢查pageloads從另一個頁面來在同一地點可能更容易使用$_SESSION變量,

  • 要檢查PCRE值的正則表達式使用preg_功能,如preg_match

  • $self_name.*的值意味着「任何字符的任意次數」(除了新行),這是非常具體的捕獲所有。

  • 它看起來像你只是檢查$self_name是否在字符串中,在這種情況下使用stripos更快。

因此,採取所有上述的考慮,你可以用替換ereg行:

if(stripos($_SERVER['HTTP_REFERER'],$something) !== false){ 
    //Yes, page was referred by URL like $something. 
} 
+0

+1 for f(strpos($ _ SERVER ['HTTP_REFERER'],$ self_name)!== false){ // found。 } –

+0

@Rudie我真的不應該只是略讀了已棄用函數的手冊頁。乾杯。更新。 – Martin

相關問題