2014-08-28 116 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