我是htaccess使用的初学者,我在谷歌搜索了一个答案,但没有找到对我好的东西。
我想做一些容易理解的事情(所以我确信有一个正确的方法)但不知道该怎么做。
我有这3个文件:
的.htaccess
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/.htpasswd
AuthGroupFile /path/.htgroups
require group intern
require group extern
require group test
htpasswd的
user1:xxx
user2:yyy
user3:zzz
.htgroups
group1:user1 user3
group2:user2
在php中我想对该组进行测试。我将在一些组中有很多用户,我将添加和删除一些,所以我不想这样做:
if($_SERVER['PHP_AUTH_USER'] == 'user1' || $_SERVER['PHP_AUTH_USER'] == 'user2')
但
if($group == 'group1')
你能帮忙找一个简单的方法来获得这个变量$ group吗?
非常感谢,
巴斯蒂安
答案 0 :(得分:1)
在对php.net进行一些研究之后,我找到了一种方法,通过匹配文件中的模式(这里是.htgoups),所以我做了这个功能来获得一组记录用户。
function getHtGroup(){
$AuthGroupFile = file("/path/.htgroups");
$user = $_SERVER['PHP_AUTH_USER'];
foreach ($AuthGroupFile as $line_num => $line) {
if(preg_match("/(.*):(.*)$user/", $line, $matches)){
$group=$matches[1];
break;
}
}
return $group;
}
答案 1 :(得分:0)
以BastienSander的答案为基础。这两个函数将从.htaccess文件中获取htgroup文件路径并获取一组用户。
function gethtgroupfilepath() {
preg_match('/AuthGroupFile .*/i', file_get_contents('.htaccess'), $match);
$htgroupfilepath = array_pop(preg_split('/AuthGroupFile /i', $match[0]));
return($htgroupfilepath);
}
function gethtgroup(){
$AuthGroupFile = file(gethtgroupfilepath());
$user = $_SERVER['PHP_AUTH_USER'];
foreach ($AuthGroupFile as $line_num => $line) {
if(preg_match("/(.*):(.*)$user/", $line, $matches)){
$group=$matches[1];
break;
}
}
return $group;
}