用来解析.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中使用gettext来支持多语言的方法
May 02 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
php操作mysqli(示例代码)
Oct 28 PHP
php使用GeoIP库实例
Jun 27 PHP
php中in_array函数用法分析
Nov 15 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
[原创]PHP简单开启curl的方法(测试可行)
Jan 11 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 PHP
thinkphp5 路由分发原理
Mar 18 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 strncasecmp字符串比较的小技巧
2011/01/04 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
php实现Mysql简易操作类
2015/10/11 PHP
session 加入redis的实现代码
2016/07/15 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
JavaScript游戏之优化篇
2010/11/08 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
简单说说tomcat的配置
2013/05/28 面试题
计算机专业个人求职自荐信
2013/09/21 职场文书
社区务虚会发言材料
2014/10/20 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
商标侵权律师函
2015/05/27 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis