Version: .9
Type: Sample Code (HOWTO)
Category: File Management
License: GNU General Public License
Description: allows an admin to alter the .htpasswd from a webpage. I was useing apache 1.3 on a Windows 98.
<HTML> <HEAD> <TITLE>Edit Password</TITLE> </HEAD> <? /* NOTE: this code is in beta stages, it requires that the htpasswd.exe and the .htpasswd is in the same directory as the PHP file. This is the best I could do under windows98 please help [email protected] wrote a program that will spit out a file with ".htpasswd" as a file name if that is a problem. E-mail me if needed. */ /* This function returns the position of string s1 within string s2. The position is 1 based. If s1 is not in s2, 0 is returned. function code was taken from jeremycreed on phpbuilder.com */ function InStr($s1, $s2) { //Check for valid input if(!(is_string($s1) && is_string($s2))) return 0; $s1len = strlen($s1); $s2len = strlen($s2); //Check if s1 in s2 at all if(!ereg($s1, $s2)) return 0; //Resolve simple case if($s1 == $s2) return 1; //Set initial search limits $begin = 0; $end = $s2len - $s1len; //Initialize position $position = 0; //Do binary search of s2 for s1 //Check left side first to find first occurance of s1 //Check right side first to find last occurance of s1 while($end > $begin + 1) { $middle = ceil(($begin + $end) / 2); $leftBegin = $begin; $rightBegin = $middle + $s1len; $leftEnd = $middle; $rightEnd = $end + $s1len; //Check left first if(ereg($s1, substr($s2, $leftBegin, $rightBegin - $leftBegin))) { $end = $middle; } else //(ereg($s1, substr($s2, $leftEnd, $rightEnd - $leftEnd))) { $position += $middle - $begin; $begin = $middle; } } //Resolve 1 off problems introduced by ceil if(ereg($s1, substr($s2, $end, $s1len))) $position++; //Return position 1 based return $position + 1; } ?> <form action="<?$PHP_SELF?>" method="post"> <B>Admin Password: </b><input type="text" name="AdminPass" size="20"><br><br> <b>User: </b><input type="text" name="User" size="20"><br> <b>User Pass: </b><input type = "text" name ="UserPW" size="20"><br> <b>Add/Edit</b><input type="radio" name="add" value="add"> <b>Remove</b><input type="radio" name="remove" Value="remove"> <input type="submit" value="Go"> </form> <? if($AdminPass == "ADMIN" && isset($add)) //set ADMIN to the password you would like { exec("htpasswd -b .htpasswd $User $UserPW"); echo "Password for $User has been added"; } elseif($AdminPass == "tacotaco" && isset($remove)) { $FileOpen = fopen("C:/website/pass/" . ".htpasswd", "r"); //chage C:/website/pass/ to the directory where the .htpasswd is located. $htPW = fread($FileOpen, filesize("C:/website/pass/" . ".htpasswd")); fclose($FileOpen); if(InStr($User, $htPW)) { $Len = (strlen($User) + 39); $Pos = InStr($User, $htPW) - 1; $NewPW = substr($htPW, 0, $Pos) . substr($htPW, ($Pos + $Len), strlen($htPW)); $FileOpen = fopen("C:/website/pass/" . ".htpasswd", "w"); fwrite($FileOpen, $NewPW); fclose($FileOpen); echo "User $User Removed"; }else{ echo "User Not Found!"; } } ?> </BODY> </HTML>