2015-05-13 73 views
2

時遇到這個作品,如果 '測試1' 中的網址:

<? if(strpos($_SERVER['HTTP_HOST'], 'test1') !== FALSE) : ?> 
    <p>Do something</p> 
<? else : ?> 
    <p>Do something else</p> 
<? endif ?> 

如果 '測試1' 是在URL這不起作用
<? if(strpos($_SERVER['HTTP_HOST'], 'test1') OR strpos($_SERVER['HTTP_HOST'], 'test2') !== FALSE) : ?> 
    <p>Do something</p> 
<? else : ?> 
    <p>Do something else</p> 
<? endif ?> 

問題:

1. 當我嘗試運行第二個選項,php每次輸出「做別的事情」 - 我知道這很基本,但爲什麼會這樣呢?有基本的PHP if/else語句

2. 爲什麼不在== TRUE工作在這種情況下,只有!==FALSE的作品。


任何幫助,將不勝感激 - 我花了很多時間嚇人量研究這個很抱歉,如果這是因爲一個愚蠢的錯誤。

乾杯

回答

2

你不應該== TRUE鬆散的測試,因爲你可能會得到誤報,請記住,0是falsy時,其測試鬆動並獲得0strpos是有效的,因爲它實際上是位置在哪裏針相對於字符串的開頭而存在。

考慮這個片斷:

<?php $_SERVER['HTTP_HOST'] = 'test1.com'; ?> 
<?php if(strpos($_SERVER['HTTP_HOST'], 'test1') == TRUE): ?> 
    <p>Do something</p> 
<?php else : ?> 
    <p>Do something else</p> 
<?php endif; ?> 

這是假陽性的例子。

test1的確是字符串(位置0)內,但由於它返回0和你有== TRUE測試它,它會在else塊走了,留下了一個錯誤的答案。

所以,你應該始終測試!== false

<?php $_SERVER['HTTP_HOST'] = 'test1.com'; ?> 
<?php if(
    (strpos($_SERVER['HTTP_HOST'], 'test1') !== false) OR 
    (strpos($_SERVER['HTTP_HOST'], 'test2') !== FALSE)) : ?> 
    <p>Do something</p> 
<?php else : ?> 
    <p>Do something else</p> 
<?php endif; ?> 
在覆蓋 manual

其實它。閱讀紅色框注意。

+0

謝謝。我可以問一下爲什麼你首先將HTTP_HOST設置爲某個東西 - 這只是一個好的編程習慣嗎?乾杯,本 – CMSCSS

+0

@CMSCSS不,我只是明確地設置'HTTP_HOST'這個特定的例子的一些價值。很高興這有幫助 – Ghost

+0

你的代碼很噁心,清理它@Ghost –

0

試試這個

if(strpos($_SERVER['REQUEST_URI'], 'test1') OR strpos($_SERVER['REQUEST_URI'], 'test2') !== FALSE){ 
    echo"<p>Do something</p>"; 
} else { 
    <p>Do something else</p> 
} 
+0

不會打開,並關閉php標籤,因爲它會減慢頁面處理速度。 –