用来解析.htpasswd文件的PHP类


Posted in PHP onSeptember 05, 2012

.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函数
Jan 11 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
javascript some()函数用法详解
Nov 13 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
PHP实现linux命令tail -f
Feb 22 PHP
PHP反射API示例分享
Oct 08 PHP
thinkPHP5分页功能实现方法分析
Oct 25 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 PHP
用来解析.htgroup文件的PHP类
Sep 05 #PHP
PHP curl 并发最佳实践代码分享
Sep 05 #PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 #PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 #PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 #PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 #PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 #PHP
You might like
理解和运用PHP中的多态性[译]
2011/08/02 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
PHP中cookie知识点学习
2018/05/06 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python中的urllib模块使用详解
2015/07/07 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python3字符串操作总结
2019/07/24 Python
python文件读写代码实例
2019/10/21 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
好军嫂事迹材料
2014/01/15 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
成立公司计划书
2014/05/07 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书