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');