PHP中的strpos问题

时间:2013-11-05 19:58:51

标签: php strpos

我有一个包含用户付费模块的字符串。如果模块不是字符串的一部分,则应显示错误页面。

变量$paidModules包含reminder newsfeed system finance

这是PHP部分,我检查用户是否支付了该模块的费用。如果不是这种情况,则应显示noAccess.php页面。

if($paidModules != null & $paidModules != "" ) {
    if (strpos($paidModules,'reminder') == false) {
        include('noAccess.php'); 
        return;
    }
}

现在问题是,即使变量$paidModules包含reminder,也会显示noAccess.php。我做错了什么?

3 个答案:

答案 0 :(得分:1)

来自PHP Manual

This function may return Boolean FALSE, but may also return a 
non-Boolean value which evaluates to FALSE. 
Please read the section on Booleans for more information. 
Use the === operator for testing the return value of this function.

您希望使用===

进行等同
strpos($paidModules,'reminder') === false

答案 1 :(得分:0)

strpos()可能会返回布尔值false。它也可以返回0作为找到的位置。

因此您需要使用strict equality

if (strpos($paidModules,'reminder') === false) {
  // code...
}

在您的情况下,因为reminder位于零位置。使用==,PHP键入juggles 0 == false true

答案 2 :(得分:0)

检查确切的错误,这样就不会得到字符串位置0:

if (strpos($paidModules,'reminder') === false) {