用来解析.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详细使用介绍
©2014-2024 dbsqp.com