用来解析.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 不错的学习资料
Feb 06 PHP
PHP 文件上传功能实现代码
Jun 24 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 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
php class类的用法详细总结
2013/10/17 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
Javascript复制实例详解
2016/01/28 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
关于Django外键赋值问题详解
2017/08/13 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
Scrapy框架使用的基本知识
2018/10/21 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
通过cmd进入python的实例操作
2019/06/26 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
毕业生自荐书
2014/02/02 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
优秀校长事迹材料
2014/12/24 职场文书
慰问信格式规范
2015/03/23 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
防止web项目中的SQL注入
2021/12/06 MySQL