#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
, который является проверкой без учета регистра для иголки в стоге сена