用来解析.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读MYSQL中文乱码的解决方法
Dec 17 PHP
简单的过滤字符串中的HTML标记
Dec 25 PHP
PHP strtotime函数详解
Dec 18 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
使用PHP生成二维码的两种方法(带logo图像)
Mar 14 PHP
php实现概率性随机抽奖代码
Jan 02 PHP
PHP编写daemon process 实例详解
Nov 13 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 PHP
php 如何设置一个严格控制过期时间的session
May 05 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
PHP RabbitMQ消息列队
May 11 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中处理模拟rewrite 效果
2006/12/09 PHP
PHPLog php 程序调试追踪工具
2009/09/09 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php安装swoole扩展的方法
2015/03/19 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
js实现计算器功能
2020/08/10 Javascript
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
在Python中操作字典之fromkeys()方法的使用
2015/05/21 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
python使用turtle库与random库绘制雪花
2018/06/22 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python通过zabbix api获取主机
2018/09/17 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
2013年大学生的自我鉴定
2013/10/24 职场文书
零件设计自荐信范文
2013/11/27 职场文书
超市客服工作职责
2014/06/11 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
学生保证书
2015/01/16 职场文书
铁人观后感
2015/06/16 职场文书
大学生志愿者心得体会
2016/01/15 职场文书