我正在查看一个旧脚本。 我找到了一个代码:
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 = '.*';
答案 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_match
等preg_
函数。
你$self_name
.*
的值意味着“任意次数的任何字符”(新行除外),这是极其非特定的全部捕获。
看起来您只是在检查$self_name
是否在字符串中,在这种情况下使用stripos
会更快。
因此,考虑到以上所有因素,您可以将ereg
行替换为:
if(stripos($_SERVER['HTTP_REFERER'],$something) !== false){
//Yes, page was referred by URL like $something.
}