strpos возвращает false с параметрами $_GET

#php

#php

Вопрос:

У меня есть следующий фрагмент:

 function RemoveSubdir(){
    // Get the requested path (including all slashes) and Convert to lowercase
    $Request_Path = strtolower($_SERVER['REQUEST_URI']);
    // Create an array, exploding at the forward slash
    $Request_Path = explode('/',$Request_Path);
    // return the last element being the file name requested
    $Arr_Elements = end($Request_Path);

    if (empty($Arr_Elements)){
        return prev($Request_Path);
    }
    return $Arr_Elements;
}

$Directory_Manipulation =  RemoveSubdir();


    echo $Directory_Manipulation;

var_dump(strpos('global.inc.php',$Directory_Manipulation));
  

В настоящее время я указываю своему браузеру правильный путь к файлу (будучи 127.0.0.1/PayC/Global.inc.php ) и возвращает из RemoveSubdir() возвращает правильное значение global.inc.php что и ожидалось.. На данный момент все работает нормально, теперь неправильные / неожиданные проверки исходят из фрагмента кода:

 strpos('global.inc.php',$Directory_Manipulation);
  

теперь я ожидаю, что это вернет что угодно, кроме false , что нормально, когда URI равен:

127.0.0.1/PayC/Global.inc.php

как показано: int(0)

Но с URI из

127.0.0.1/PayC/Global.inc.php ?

Я получаю возврат: bool(false)

Я знаю, что мог бы удалить конечные параметры после расширения .php, но я хочу оставить их нетронутыми.. Я пытался продолжить отладку, но был вынужден var_dumping опубликовать свои результаты здесь

Ответ №1:

Насколько я понимаю, вы пытаетесь выяснить, является ли global.inc.php находится внутри $Directory_Manipulation. В этом случае вы получили свои параметры в обратном порядке! Это должно быть

 var_dump(strpos($Directory_Manipulation, 'global.inc.php'));
  

Вы также можете посмотреть документацию php для strpos . 🙂

Комментарии:

1. Ах. Вот так. Даже после просмотра документации.. Я неправильно получал параметры. Спасибо

Ответ №2:

Похоже, проблема с чувствительностью к регистру. Попробуйте это:

 $Directory_Manipulation =  RemoveSubdir();
$DM_lower = strtolower($Directory_Manipulation);
  

И выполняет strpos() использование $DM_lower вместо $Directory_Manipulation .

Комментарии:

1. Чувствительность к регистру не является проблемой, поскольку предыдущий вызов функции преобразует параметры в нижний регистр, отсюда строка: $Request_Path = strtolower($_SERVER['REQUEST_URI']);

2. Если бы это была также проблема с типом параметра case. Тогда я бы не добился правильной проверки в первом примере URI

3. Я напрямую изменяю массив $ _SERVER для преобразования в нижний регистр, прежде чем выполнять дальнейшие манипуляции. Я попробую, не возлагаю больших надежд

4. Те же результаты, и если бы это была проблема с верхним / нижним регистром, я бы продолжил использовать stripos , который является проверкой без учета регистра для иголки в стоге сена