2016-07-20 56 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

相关问题