<? if(strpos($_SERVER['HTTP_HOST'], 'test1') !== FALSE) : ?>
<p>Do something</p>
<? else : ?>
<p>Do something else</p>
<? endif ?>
<? 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每次输出“Do something else” - 我知道它是基本的,但为什么会这样?
2。
为什么== TRUE
在此实例中不起作用,只有!==FALSE
有效。
任何帮助都会非常感激 - 我花了很多时间来研究这个,很抱歉,如果这是因为一个愚蠢的错误。
干杯
答案 0 :(得分:2)
您不应该使用== TRUE
进行松散测试,因为您可能会出现误报,请记住0
在测试松散且0
中strpos
为假时是假的。是有效的,因为它实际上是针存在于相对于字符串开头的位置。
请考虑以下代码段:
<?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覆盖。阅读红色框注意事项。
答案 1 :(得分: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>
}