用来解析.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中函数内引用全局变量的方法
Oct 20 PHP
PHP 数组基础知识小结
Aug 20 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
php截取html字符串及自动补全html标签的方法
Jan 15 PHP
详解PHP实现执行定时任务
Dec 21 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
Jun 03 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 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的Laravel框架中的event事件操作
2016/03/21 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
js tab效果的实现代码
2009/12/26 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
高中物理教学反思
2014/02/08 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
个人查摆剖析材料
2014/10/04 职场文书
单位推荐信范文
2015/03/27 职场文书
贷款工资证明范本
2015/06/12 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers