用来解析.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.
}

相关文章

  • thinkPHP3.2.3结合Laypage实现的分页功能示例

    thinkPHP3.2.3结合Laypage实现的分页功能示例

    这篇文章主要介绍了thinkPHP3.2.3结合Laypage实现的分页功能,结合实例形式分析了thinkPHP3.2.3结合Laypage实现分页的model控制器与view视图相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • ThinkPHP函数详解之M方法和R方法

    ThinkPHP函数详解之M方法和R方法

    本篇文章给大家介绍ThinkPHP函数详解之M方法和R方法,M方法用于实例化一个基础模型类,而R方法用于调用某个控制器的操作方法,感兴趣的朋友跟着脚本之家的小编一起来学习吧
    2015-09-09
  • Zend Framework教程之Application和Bootstrap用法详解

    Zend Framework教程之Application和Bootstrap用法详解

    这篇文章主要介绍了Zend Framework教程之Application和Bootstrap用法,结合实例形式详细分析了Application和Bootstrap的功能,使用技巧与相关注意事项,需要的朋友可以参考下
    2016-03-03
  • php的mkdir()函数创建文件夹比较安全的权限设置方法

    php的mkdir()函数创建文件夹比较安全的权限设置方法

    这篇文章主要介绍了php的mkdir()函数创建文件夹比较安全的权限设置方法,遇到的情况是系统umask影响了mkdir的指定权限参数比期望要小,使用chmod函数则没有这个问题,需要的朋友可以参考下
    2014-07-07
  • PHP实现用户认证及管理完全源码

    PHP实现用户认证及管理完全源码

    PHP实现用户认证及管理完全源码...
    2007-03-03
  • php封装的smartyBC类完整实例

    php封装的smartyBC类完整实例

    这篇文章主要介绍了php封装的smartyBC类,通过自定义类实现针对Smarty2的有效兼容与扩展,需要的朋友可以参考下
    2016-10-10
  • Zend Framework基本页面布局分析

    Zend Framework基本页面布局分析

    这篇文章主要介绍了Zend Framework基本页面布局方法,结合实例形式分析了Zend Framework页面布局的基本步骤与相关设置技巧,需要的朋友可以参考下
    2016-03-03
  • PHP实现的连贯操作、链式操作实例

    PHP实现的连贯操作、链式操作实例

    这篇文章主要介绍了PHP实现的连贯操作、链式操作实例,本文用一个数据库操作类作为实例,需要的朋友可以参考下
    2014-07-07
  • 使用php方法curl抓取AJAX异步内容思路分析及代码分享

    使用php方法curl抓取AJAX异步内容思路分析及代码分享

    怎样抓取AJAX网站的内容?这是一个热门的问题,也是一个棘手的问题。但实际上呢,抓取ajax异步内容的页面和抓普通的页面区别不大。ajax只不过是做了一次异步的http请求,只要使用firebug类似的工具,找到请求的后端服务url和传值的参数,然后对该url传递参数进行抓取即可
    2014-08-08
  • thinkPHP框架实现的简单计算器示例

    thinkPHP框架实现的简单计算器示例

    这篇文章主要介绍了thinkPHP框架实现的简单计算器,结合实例形式分析了基于thinkPHP框架的用户登陆、数值计算、数据库读写、历史记录保存等功能相关实现技巧与操作注意事项,需要的朋友可以参考下
    2018-12-12

最新评论