php修改htpasswd,用来解析.htpasswd文件的PHP类
.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修改htpasswd,用来解析.htpasswd文件的PHP类相关推荐
- 解析HTML文件 - 运用SgmlReader类来解析HTML文件
运用.NET Framework类来解析HTML文件.读取数据并不是最容易的.虽然你可以用.NET Framework中的许多类(如StreamReader)来逐行解析文件,但XmlReader提供的 ...
- C#怎样解析.CSV文件同时把类转换成JSON
1.首先需要引用 Newtonsoft.Json 目的是为了把对象类直接转换为JSON,返回到前台 using Newtonsoft.Json; 2.定义一个类,存储返回的值 public class ...
- 使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件
xml的创建,解析 1. 什么是xml文件 1.1 什么是xml文件 1.2 解析xml的方式,优缺点 2. 使用dom操作xml文件 2.1 使用dom创建xml文件 2.2 使用dom解析xml文 ...
- 第六章、epub文件处理 -- 解析container文件与.opf文件
2019独角兽企业重金招聘Python工程师标准>>> 第六章.epub文件处理 -- 解析container文件与.opf文件 这一章我们会接着第三章结尾介绍的FBReaderAp ...
- java解析Excel文件
下文介绍java解析Excel文件的方案 前置准备 1.第三方jar包或者Maven配置 org.apache.poi的jar包 Maven配置如下 <groupId>org.apache ...
- Android中使用SAX方式解析XML文件
转载http://blog.csdn.net/cjjky/article/details/6666834 在Android中解析XML文主要有三种方式,分别为Simple API for XML(SA ...
- 解析json文件、执行批量修改sql
要求:解析json文件,取出其中的参数,修改数据库中的数据 数据量:190万条 使用线程池批量处理sql 1.线程: public class DateHandleThread extends Thr ...
- [原创工具] 文件MD5批量修改工具及原理解析(附C#源码)
1.首先告诉大家怎么查看文件的MD5码,命令窗口中输入如下命令: certutil -hashfile 文件名.后缀 MD5 2.原理剖析: 当某个文件的某段数据改变了,哪怕是变了一个字节,那么这个文 ...
- 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出
写在前面 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python等(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准. 之前分享过 ...
最新文章
- spring boot学习资料以及DEMO项目
- 飞桨端到端开发套件揭秘:四大秘密武器,让你的开发效率直线提升
- maple 假设_Maple常用计算命令..
- Codeforces Round #732 (Div. 2) D. AquaMoon and Chess 组合数学 + 找规律
- Java 8流中的数据库CRUD操作
- Java编程学习并不难,有坚持的动力与良好的心态尤为重要
- objective-c 使用NSNumber 将int float long等数据类型加入到数组或字典中
- python搭建webapi_怎么搭建Web Api
- 以太网接口MII,RMII,SMII,GMII总线接口简介
- 实验3-10 高速公路超速处罚 (15 分)
- 四十五.加密与解密 AIDE入侵检测系统 扫描与抓包
- 关于艾宾浩斯曲线的一点思考
- 谷歌浏览器如何安装seleiumIDE插件
- 九个完全免费的PPT模板网站
- win10计算机怎么改中文,win10系统中文语言的设置方法
- 北大青鸟昌平校区 | 学网络运维与安全就业薪资多少?
- 定义类MyProgram,包含两个属性:一个是private的整型属性data、一个是private的String类型属性str,重写toString,equals
- 使用快照启动 FIBOS、EOS 节点
- 第三章 View的基本概念
- 微信小程序C语言通讯录,微信小程序のwxml列表渲染
热门文章
- python中__init__文件的运用_python中__init__.py文件的作用
- python解常微分方程_Python-sympy.dsolve求解常微分方程(组)
- oracle表复制为mysql表_oracle 将数据库的表复制到另一个数据库表内
- jenkins 手动执行_Jenkins Git client插件命令执行漏洞(CVE201910392)
- ios 一直是正在等待审核_iOS开发者账号被调查了,相关问题整理
- 【C语言基础】C语言异常捕获机制 - setjmp
- java的serversocket_Java ServerSocket 实现聊天室功能(简易版)
- php 添加inotify扩展,php inotify 扩展的安装
- 使用计算机时 正确的关机顺序是( ),《计算机应用基础》半期考试卷
- Python实现简单的学生管理系统