用来解析.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详细使用介绍