Skip to content
Oleg Grigoriev edited this page Apr 3, 2016 · 4 revisions

axy\htpasswd

Работа с файлом htpasswd (PHP)

Documentation in English

  • Библиотека не требует внешних зависимостей (кроме других composer-пакетов).
  • Протестировано на PHP 5.4+, PHP 7, HHVM (Linux), PHP 5.5 (Windows).
  • Установка: composer require axy/htpasswd.
  • License: MIT.

Документация

Библиотека предоставляет программное API для работы с файлами htpasswd. Консольная утилита доступна в отдельном пакете axy/htpasswd-cli.

use axy\htpasswd\PasswordFile;

$file = new PasswordFile('/path/to/.htpasswd');
$file->setPassword('nick', 'password');
$file->setPassword('john', '123456');
$file->save();

Поддерживаемые алгоритмы шифрования (константы класса PasswordFile::*):

  • ALG_MD5: алгоритм Apache APR1-MD5 (используется по умолчанию).
  • ALG_BCrypt: Blowfish
  • ALG_SHA1: SHA-1
  • ALG_CRYPT: crypt (Unix)
  • ALG_PLAIN: Просто текст (не поддерживается серверами на некоторых платформах).
__construct([string $filename])

Конструктор принимает имя файла с паролями.

Или NULL: аналог опции -n для консольной утилиты:

$file = new PasswordFile();
$file->setPassword('nick', 'password');
$file->getContent(); // возвращает содержимое "файла"

$file->save(); // Исключение FileNotSpecified
setPassword(string $user, string $password [, string $algorithm, [array $options]): bool

Устанавливает пароль $password для пользователя $user. Для шифрования (хэширования) используется $algorithm (по умолчанию Apache MD5).

$options - опции шифрования. Сейчас поддерживается только cost для BCrypt (число между 4 и 31 включительно).

Возвращает TRUE в случае создания нового пользоватея и FALSE если был изменён пароль для уже существующего.

remove(string $user): bool

Удаляет запись о пользователе из файла. Возвращает TRUE если пользователь был удалён и FALSE если его не было изначально.

verify(string $user, string $password): bool

Возвращает TRUE если пользователь $user существует и ему подошёл пароль $password.

isUserExist(string $user): bool

Проверяет, есть ли в файле запись о пользователе $user.

if (!$file->isUserExist('john')) {
    echo 'John? Мы вас не знаем.';
    exit();
}
if (!$file->verify('john', 'password')) {
    echo 'Ты не John! Ты самозванец!';
    exit();
}
echo 'Привет, John';
getContent(void): string

Возвращает содержимое файла (без записи).

save(void): void

Сохраняет содержимое файла (если он указан).

В отличии от утилиты htpasswd (см. опцию -c) существующий файл всегда изменяется (не перезаписывается). Несуществующий файл создаётся.

setFileName(string $filename): void

Устанавливает новое имя файла. Содержимое старого файла будет загружено и сохранено в новом (после save()).

getFileName(void): string

Возвращает текущее имя файла.

Exceptions

Классы исключений находятся в пространстве имён axy\htpasswd\errors.

  • InvalidFileFormat: файл паролей имеет некорректный формат.
  • FileNotSpecified: выбрасывается из save() если файл не был указан в конструкторе.