Como utiliza-lo arquivo .htpasswd

Encher un formulario de contrasinal nunha web pode ser crucial á hora de compartir contido con usuarios autorizados.
Con este arquivo podemos validar credenciais almacenadas e desta maneira poder acceder a unha sesión persoal.

Que é .htpasswd?

É un arquivo que axuda a protexer contidos como arquivos, carpetas ou unha web enteira usando a autenticación HTTP. As regras dun arquivo .htaccess poden facer funcionar ó .htpasswd. Os datos deste arquivo son arquivados en texto plano e as contrasinais son almacenadas nun formato encriptado. Esta encriptación é, polo xeral, MD5, polo tanto en Linux pode estar baseada na función crypt(). Aínda que é posible nomea-lo arquivo do contrasinal como queiramos, non se recomenda xa que Apache está preconfigurado para utilizar .httpasswd de maneira predeterminada.

Como crealo?

Este arquivo debe ser formatado en texto plano, o seu nome debe ser .htpasswd e, malia que o podemos localizar en calquera parte do noso sitio, é preferible utiliza-la carpeta destinada para isto no noso servidor, xeralmente situada por enriba da carpeta que almacena a web. Esta carpeta pode chamarse .htpasswds e seguramente estea no mesmo nivel de directorio que public_ftp.

Utilizando .htpasswd

O seu uso é completamente sinxelo, para comezar, podemos crear uns usuarios aleatorios neste arquivo, para poder proba-las funcións que o chaman e manipulan.
usuario1:contrasinal1
usuario2:contrasinal2

Recupera-los datos

Pódense recuperar estes datos dunha maneira ben sinxela e engadilos a un array para a súa fácil lectura.
function showUser() {
    $file = file('members/password/.htpasswd');
    $array = array();
    $count = count($file);
    for ($i = 0; $i < $count; $i++) {
        list($username, $password) = explode(':', $file[$i]);
      $array[] = array("username" => $username, "password" => $password);
    }
    return $array;
}

Eliminar un usuario

Doutra maneira tamén moi sinxela, podemos elimina-lo usuario elixido.
function delUser($username) {
    $fileName = file('members/password/.htpasswd');
    $pattern = "/". $username."/";
    foreach ($fileName as $key => $value) {
        if(preg_match($pattern, $value)) { $line = $key; }
    }
    unset($fileName[$line]);
    if (!$fp = fopen('members/password/.htpasswd', 'w+')) {
        print "Cannot open file ($fileName)";
        exit;
    }
 
    if($fp) {
        foreach($fileName as $line) { fwrite($fp,$line); }
        fclose($fp);
    }
}

Crear un usuario

Desta vez utilizaremos a función crypt para encripta-lo noso contrasinal, isto axudará un pouco máis na protección das credenciais. Para poder facer unha comparación cos datos engadidos nun formulario de acceso, é aconsellable utilizar estes métodos, para así nunca utiliza-los datos reais dos usuarios.
function regUser() {
    $filename = 'members/password/.htpasswd';
    $data = $_POST['username'] . ":" . htpasswd($_POST['password']) . "\n";
    if (is_writable($filename)) {
        if (!$handle = fopen($filename, 'a')) {
            echo "Cannot open file ($filename)";
            exit;
        }
   
        if (fwrite($handle, $data) === FALSE) {
            echo "Cannot write to file ($filename)";
            exit;
        }
        fclose($handle);
    } else {    
        echo "The file $filename is not writable";
    }
}
function htpasswd($pass) {
    $pass = crypt(trim($pass),base64_encode(CRYPT_STD_DES));
    return $pass;
}

Fontes documentais

hostwinds.com
daniweb.com