2014-08-28 161 views
-1

我试图使用strpos来查看HTTP_REFERER是否包含某个URL($ referral),但由于某些原因下面的代码不工作。但是,如果我用相同内容的字符串替换变量$引用,它​​似乎工作。谁能告诉我为什么,或者我在看什么?strpos not working PHP

//$_SERVER['HTTP_REFERER'] = http://www.example.com/something/somefile.php 

$referral = 'http://www.example.com/'; 
$server = $_SERVER['HTTP_REFERER']; 

if(strpos($server,$referral) !== false) 
{ 
    echo 'true'; 
} 
else 
{ 
    echo 'false'; 
} 

//outputs 'false' 
+0

“如果我替换变量$引用” - 但$引用已经是一个字符串,你的意思是$服务器? – user4035 2014-08-28 07:22:36

+0

你看过你希望在字符串中找到的变量内容吗? – fuesika 2014-08-28 07:22:37

+0

尝试在您面对错误的相同URL上打印'$ server',您会注意到它的差异,为什么它不会返回true .. – 2014-08-28 07:27:16

回答

1

也许$server不是http://www.example.com/something/somefile.php

使用:

$referral = 'http://www.example.com/'; 
$server = 'http://www.example.com/something/somefile.php'; 

if(strpos($server,$referral) !== false) 
{ 
    echo 'true'; 
} 
else 
{ 
    echo 'false'; 
} 

输出是true

+1

OP表示,如果他手动分配'$ server',他的代码_did_工作,所以真的,你没有告诉任何喔 – 2014-08-28 07:24:56

+0

@EliasVanOotegem是正确的,不明白+1 – Sal00m 2014-08-28 07:25:31

+0

“也许......”应该是一个评论,你只是改写了奇怪的行为 – Sugar 2014-08-28 07:26:34

0

如果您正在访问域中没有任何路径例如:http://www.example.com,则因为没有结尾没有反斜杠你的脚本将返回false。您也许不打开网站与www或有和ssl(https)

您可以请发布var_dump($服务器)在它不起作用的页面?

+0

这是一个JSONP请求的所有部分,所以我不能真正var_dump。然而,我可以设置一个变量来返回它的值,它返回的值以及$ referral的值是相同的。 (strcmp($ server,$ referral))结果为“0”,确认它们是一样的? – user1129107 2014-08-28 07:42:09

1

如何以及是否设置了$_SERVER['HTTP_REFERER']取决于用户代理。这个值不需要设置,即使它不可靠。从the PHP documentation摘自:

“HTTP_REFERER”
的页面(如果有的话),其被称为用户代理到当前页面的地址。这由用户代理设置。并非所有的用户代理都会设置它,有些提供了将HTTP_REFERER修改为功能的功能。总之,它不能真正被信任。

那就是,我想,你在这里忽略了什么。

+0

谢谢你。我考虑了这一点,但我无法弄清楚的是,如果我回应$ server和$ referral,它们是相同的,这意味着它实际上正在设置,不是吗?编辑:它只是在放入strpos之后才返回false。 – user1129107 2014-08-28 07:28:42

+0

@ user1129107:如果它们是相同的,请尝试'var_dump(strcmp($ server,$ referral));',如果它们真的相等,它应该转储0 – 2014-08-28 07:30:25

+0

刚刚测试过它并返回“0” – user1129107 2014-08-28 07:37:37