Table of Contents
Initialize class
We need to initialize the class. Set a filename of the .htpasswd with full or relative path:
require_once('../src/htpasswd.class.php');
$oHtpasswd=new htpasswd('/var/www/users/.htpasswd');
CRUD actions
Add user
if (!$oHtpasswd->add('anton','antons-secret-password'){
die("Failed");
}
if (!$oHtpasswd->add('berta','bertas-secret-password'){
die("Failed");
}
echo "OK";
List all users
print_r($oHtpasswd->list());
… returns something like this:
Array
(
[anton] => Array
(
[pwhash] => $2y$12$NCeDta6hPIBZhZCqk8sU9exB16j/m8mIRN2OySuWz2FVwlhmLWkey
)
[berta] => Array
(
[pwhash] => $2y$12$zEldMcliehpfYXawUW8evebVyhNlYR5R4DlCxD/WPK6DReKSorsMO
)
)
Update existing password
if (!$oHtpasswd->update('anton','antons-new-password')){
die("Failed");
}
echo "OK";
There is a 3rd param for the old param. If the old password is given, the password update will be performed only if the old password matches.
Delete user entry
if (!$oHtpasswd->remove('anton')){
die("Failed");
}
echo "OK, user was deleted";
More methods
Check if user exists
if ($oHtpasswd->exists('anton')){
echo "User exists";
}
Verify password
if ($oHtpasswd->verifyPassword('anton','antons-secret-password')){
echo "Password is correct";
}
Last error
Actons return success as bool. If it fails you can get the last error message. This is useful for debugging. Do not show the error message to the user.
echo $oHtpasswd->error();
axelhahn\htpasswd::add: Cannot add user 'anton', user already exists
Debugging
With a bool value you can enable or disable debug mode.
$oHtpasswd->debug(true);
$oHtpasswd->add('anton','antons-secret-password');
echo PHP_EOL;
$oHtpasswd->add('anton','antons-secret-password');
After enabling debugging you see debug info and why a method would return false.
DEBUG: axelhahn\htpasswd::add(user 'anton', password '**********')
DEBUG: axelhahn\htpasswd::_UserExists(user 'anton')
DEBUG: axelhahn\htpasswd::add: Adding user ...
DEBUG: axelhahn\htpasswd::_saveFile()
DEBUG: axelhahn\htpasswd::generateContent()
DEBUG: axelhahn\htpasswd::generateContent: adding 1 user(s) ...
DEBUG: axelhahn\htpasswd::add(user 'anton', password '**********')
DEBUG: axelhahn\htpasswd::_UserExists(user 'anton')
DEBUG: axelhahn\htpasswd::add: Cannot add user 'anton', user already exists
Set a new file name
You can set a new full path of the .htpasswd file. It is not required that it exists, but the given directory must be writable. With using the 1st writing action the file will be created.
$oHtpasswd->setFile('/var/www/website_2/.htpasswd');