我在php中遇到in_array
函数的一些问题,我有一个需要$key
变量的重置函数,我面临的是,in_array
不接受uri_string
是admin / user / reset,我被重定向到登录页面,但如果我将下面的代码修改为精确的密码重置密钥,如admin / user / reset / PasswordResetKey,它就不会重定向,因为你可以猜测。
正如我从php手册中看到的那样,仅仅包含uri_string
中的重置字符串还是我错了?
$exceptions = array('admin/user/login', 'admin/user/forgot', 'admin/user/logout', 'admin/user/reset');
if(in_array(uri_string(),$exceptions) == FALSE){
if($this->user_m->loggedin() == FALSE){
redirect('admin/user/login');
}
答案 0 :(得分:0)
in_array
将传入的文字值与匹配数组中的文字值进行比较,它不会执行部分字符串。你能做的是:
$exceptions = array('admin/user/login', 'admin/user/forgot', 'admin/user/logout', 'admin/user/reset');
foreach($exceptions as $exception) {
if(strpos(uri_string(), $exception === false) {
if($this->user_m->loggedin() == FALSE){
redirect('admin/user/login');
}
}
}
// no exceptions caught if you get to here
您可能希望使用stripos
代替(不区分大小写):http://www.php.net/manual/en/function.stripos.php
答案 1 :(得分:0)
您可以 explode uri_string
变量来创建一个段数组,然后传递第三段进行in_array
检查。那么您的例外可以是array('login', 'logout', 'reset', 'forgot');
$exceptions = array('login', 'forgot', 'logout', 'reset');
uri = explode('/', uri_string());
if(in_array(uri[2],$exceptions) == FALSE){
if($this->user_m->loggedin() == FALSE){
redirect('admin/user/login');
}