Проблема с strpos в PHP

У меня есть строка, содержащая платные модули пользователя. Если модуль не является частью строки, должна отображаться страница с ошибкой.

Переменная $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 ответа

strpos() может возвращать логическое значение false. Он также может вернуть 0 в качестве найденной позиции.

Таким образом, вам нужно использовать строгое равенство:

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

В вашем случае, потому что reminder найдено в нулевой позиции. Использование ==, PHP type-juggles 0 == false как true.


Из руководства по PHP

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


Проверьте точно, чтобы вы не получили строку 0:

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

licensed under cc by-sa 3.0 with attribution.