用来解析.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递归创建和删除文件夹的代码小结
Apr 13 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
php增删改查示例自己写的demo
Sep 04 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
在IIS下安装PHP扩展的方法(超简单)
Apr 10 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
php双层循环(九九乘法表)
Oct 23 PHP
php表单处理操作
Nov 16 PHP
Centos7安装swoole扩展操作示例
Mar 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 set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
房地产开发计划书
2014/01/10 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
学校献爱心活动总结
2014/07/08 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
python使用BeautifulSoup 解析HTML
2022/04/24 Python
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers