$ _SERVER [' HTTP_REFERER']和$ HTTP_REFERER有什么区别?

时间:2016-07-20 21:50:01

标签: php

我正在查看一个旧脚本。 我找到了一个代码:

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 = '.*';

2 个答案:

答案 0 :(得分: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 :(得分:1)

$HTTP_REFERER$ereg最后遗留下来,PHP4,从PHP5开始 DEPRECATED ,在PHP7中 REMOVED 。< / p>

ereg($self_name, $HTTP_REFERER)
     

我可以将该代码更改为以下代码吗?:

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

检查$self_name是否在引用URI中。

需要注意的一些要点:

  • $_SERVER['HTTP_REFERER']是PHP5,PHP7 +等同于旧版$HTTP_的值。

  • $_SERVER['HTTP_REFERER']通常没有设置或充其量是不可靠的,不应该信任任何远程关键的代码决策。

  • 如果您想检查网页加载是否来自同一网站上的其他网页,可能更容易使用$_SESSION变量,

  • 要检查PCRE值正则表达式,请使用preg_matchpreg_函数。

  • $self_name .*的值意味着“任意次数的任何字符”(新行除外),这是极其非特定的全部捕获。

  • 看起来您只是在检查$self_name是否在字符串中,在这种情况下使用stripos会更快。

因此,考虑到以上所有因素,您可以将ereg行替换为:

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