用来解析.htpasswd文件的PHP类
2015-01-24信息快讯网
有时候需要获取.htpasswd文件的内容,那么就可以用下面的代码类了,需要的朋友可以参考下
.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的password_hash()使用实例
解析centos中Apache、php、mysql 默认安装路径
PHP Class&Object -- 解析PHP实现二叉树
PHP Class&Object -- PHP 自排序二叉树的深入解析
解析在apache里面给php写虚拟目录的详细方法
解析php addslashes()与addclashes()函数的区别和比较
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
探讨GDFONTPATH能否被winxp下的php支持
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
php class中public,private,protected的区别以及实例分析
php class中self,parent,this的区别以及实例介绍
三个类概括PHP的五种设计模式
用来解析.htgroup文件的PHP类
Windows下部署Apache+PHP+MySQL运行环境实战
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
apache+codeigniter 通过.htcaccess做动态二级域名解析
深入了解PHP类Class的概念
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
openflashchart 2.0 简单案例php版
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Trying to clone an uncloneable object of class Imagic的解决方法
提示Trying to clone an uncloneable object of class Imagic的解决
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍