用来解析.htpasswd文件的PHP类

 更新时间:2012年09月05日 23:19:25   作者:  
有时候需要获取.htpasswd文件的内容,那么就可以用下面的代码类了,需要的朋友可以参考下
.htpasswd 文件示例:
user1:{SHA}kGPaD671VNU0OU5lqLiN/h6Q6ac=
user2:{SHA}npMqPEX3kPQTo+x/+ZckHDrIcQI=
user3:{SHA}q1Fh2LTUjjkncp11m0M9WUH5Zrw=
复制代码 代码如下:

class Htpasswd {
private $file = '';
private $salt = 'AynlJ2H.74VEfI^BZElc-Vb6G0ezE9a55-Wj';
private function write($pairs = array()) {
$str = '';
foreach ($pairs as $username => $password) {
$str .= "$username:{SHA}$password\n";
}
file_put_contents($this -> file, $str);
}
private function read() {
$pairs = array();
$fh = fopen($this -> file, 'r');
while (!feof($fh)) {
$pair_str = str_replace("\n", '', fgets($fh));
$pair_array = explode(':{SHA}', $pair_str);
if (count($pair_array) == 2) {
$pairs[$pair_array[0]] = $pair_array[1];
}
}
return $pairs;
}
private function getHash($clear_password = '') {
if (!empty($clear_password)) {
return base64_encode(sha1($clear_password, true));
} else {
return false;
}
}
public function __construct($file) {
if (file_exists($file)) {
$this -> file = $file;
} else {
die($file." doesn't exist.");
return false;
}
}
public function addUser($username = '', $clear_password = '') {
if (!empty($username) && !empty($clear_password)) {
$all = $this -> read();
if (!array_key_exists($username, $all)) {
$all[$username] = $this -> getHash($clear_password);
$this -> write($all);
}
} else {
return false;
}
}
public function deleteUser($username = '') {
$all = $this -> read();
if (array_key_exists($username, $all)) {
unset($all[$username]);
$this -> write($all);
} else {
return false;
}
}
public function doesUserExist($username = '') {
$all = $this -> read();
if (array_key_exists($username, $all)) {
return true;
} else {
return false;
}
}
public function getClearPassword($username) {
return strtolower(substr(sha1($username.$this -> salt), 4, 12));
}
}

使用方法
复制代码 代码如下:

$passwdHandler = new Htpasswd('/home/myuser/.htpasswd');
// Add a user with name 'user1' and password 'I prefer to use passphrase rather than password.' if it doesn't exist in .htpasswd.
$passwdHandler -> addUser('user1', 'I prefer to use passphrase rather than password.');
// Delete the user 'user1' if it exists in .htpasswd.
$passwdHandler -> deleteUser('user1');
// Check if user 'user1' exists in .htpasswd.
if ($passwdHandler -> doesUserExist('user1')) {
// User 'user1' exists.
}

相关文章

  • PHP输入输出流学习笔记

    PHP输入输出流学习笔记

    这篇文章主要介绍了PHP输入输出流学习笔记,PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流、标准输入输出和错误描述符,内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器,需要的朋友可以参考下
    2015-05-05
  • php微信公众号开发之微信企业付款给个人

    php微信公众号开发之微信企业付款给个人

    这篇文章主要为大家详细介绍了php微信公众号开发之微信企业付款给个人,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 详谈PHP文件目录基础操作

    详谈PHP文件目录基础操作

    这篇文章主要详细介绍了PHP文件目录基础操作,并附上大量的操作实例,非常的详尽,有需要的朋友可以参考下
    2014-11-11
  • PHP实现长文章分页实例代码(附源码)

    PHP实现长文章分页实例代码(附源码)

    当文章内容比较长,为了更好的满足用户体验度,我们将文章内容分页显示处理,而一般分页处理是在后台发布文章的时候就将提交的内容生成多个分页后的静态文件。通过本文结合实例采用php动态将长文章内容进行分页处理
    2016-02-02
  • Yii+MYSQL锁表防止并发情况下重复数据的方法

    Yii+MYSQL锁表防止并发情况下重复数据的方法

    这篇文章主要介绍了Yii+MYSQL锁表防止并发情况下重复数据的方法,分析了MySQL读锁定、写锁定及Yii实现MySQL读写锁定的相关技巧,需要的朋友可以参考下
    2016-07-07
  • tp5框架的增删改查操作示例

    tp5框架的增删改查操作示例

    这篇文章主要介绍了tp5框架的增删改查操作,结合实例形式分析了thinkPHP5框架数据库连接及增删改查相关操作的控制器与视图使用技巧,需要的朋友可以参考下
    2019-10-10
  • PHP调用OpenOffice实现word转PDF的方法

    PHP调用OpenOffice实现word转PDF的方法

    下面小编就为大家带来一篇PHP调用OpenOffice实现word转PDF的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Yii中Model(模型)的创建及使用方法

    Yii中Model(模型)的创建及使用方法

    这篇文章主要介绍了Yii中Model(模型)的创建及使用方法,结合实例形式较为详细的分析了Yii中模型的基本创建技巧,使用方法及相关注意事项,需要的朋友可以参考下
    2015-12-12
  • layui数据表格自定义每页条数limit设置

    layui数据表格自定义每页条数limit设置

    今天小编就为大家分享一篇layui数据表格自定义每页条数limit设置,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Yii2中YiiBase自动加载类、引用文件方法分析(autoload)

    Yii2中YiiBase自动加载类、引用文件方法分析(autoload)

    这篇文章主要介绍了Yii2中YiiBase自动加载类、引用文件的方法,实例分析了Yii中的autoload函数用于自动加载类及引用文件的相关技巧,需要的朋友可以参考下
    2016-07-07

最新评论