0

我是使用 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 吗?

非常感谢,

巴斯蒂安

4

2 回答 2

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;
}
于 2012-08-30T08:19:57.600 回答
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;
}
于 2017-12-19T21:58:12.460 回答