用来解析.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 08 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
Dec 01 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
Yii实现简单分页的方法
Apr 29 PHP
基于thinkPHP类的插入数据库操作功能示例
Jan 06 PHP
Smarty3配置及入门语法
Feb 22 PHP
php多文件打包下载的实例代码
Jul 12 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
Apr 02 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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
使用Python对微信好友进行数据分析
2018/06/27 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
实现Python与STM32通信方式
2019/12/18 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
教师见习报告范文
2014/11/03 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android