.htaccessと.htpasswdの設置

.htaccessと.htpasswdを設置するファイルが以下。
gen.phpと同じ階層に/secretというフォルダを用意し、書き込み可にする。
gen.php:

      ユーザ追加フォーム<br>
      <br>
      ID、Passwordを書き込み、<br>
      「送信」ボタンを押してください。<br>
      <br>
      <form method="post" action="gen.php">
        ID:<br>
        <input type="text" name="ID" value="" size="50" ><br>
        Password:<br>
        <input type="password" name="password" value="" size="50"><br>
        <br>
        <input type="submit" name="submit" value="送信">
      </form>
		<?php
		print_r($_POST);
		$filename = "secret/.htpasswd";
		$password=$_POST['password'];
		$ID = $_POST['ID'];
		
		if (isset($_POST['submit'])) {
			$contents = $ID. ":". crypt($password, substr($ID, 0, 2));
			// htpasswdファイル設置
			$file = fopen($filename,"w");
			flock($file, 2);
			fwrite($file, $contents);
			fclose($file);

			// htaccessファイル設置
			$file = fopen("secret/.htaccess", "w");
			$contents = 
'AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "This is user area"
AuthType Basic
require valid-user
';
			fwrite($file, $contents);
			fclose($file);
			print (htmlspecialchars($ID)."を設置しました");             
		}
		?>

.htaccessの設置場所は/secretの下としているので、/path/to/はそこまでの絶対パス
これを実行し、IDとpasswordを設定すれば、/secretの中はBASIC認証が要求される。
ちなみにこの.htpasswdファイルは、.htpasswdでなければならず、別の名前では効かない。

参考:http://php.dori-mu.net/basic.html
こちらの参考にしたページではユーザーを追加しているが、本コードでは上書きしている。


ただし、これだけで動かないかもしれない。サーバーのhttpd.confを編集する必要がある場合は以下
rootでhttpd.confをedit
# su
# vi /etc/httpd/conf/httpd.conf
以下のようなセクションがある(コメントは削除してある):

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

ここのAllowOverride NoneをAllowOverride Allに変更