用来解析.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 09 PHP
php array_flip() 删除数组重复元素
Jan 14 PHP
php实现监听事件
Nov 06 PHP
php简单的留言板与回复功能具体实现
Feb 19 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 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实现的在线人员函数库
2008/04/09 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
用 JSON 处理缓存
2007/04/27 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Python 实现微信防撤回功能
2019/04/29 Python
基于python实现百度翻译功能
2019/05/09 Python
django框架两个使用模板实例
2019/12/11 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
函授毕业生的自我鉴定
2013/11/26 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
中标通知书范本
2015/04/17 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
CentOS MySql8 远程连接实战
2022/04/19 MySQL
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS