バックグラウンド
認証を処理する PHP/5.3.2 がセットアップされた Apache/2.2.15 (Win32) があります。
<Directory /usr/www/myhost/private>
# core authentication and mod_auth_basic configuration
# for mod_authn_dbd
AuthType Basic
AuthName "My Server"
AuthBasicProvider dbd
# core authorization configuration
Require valid-user
# mod_authn_dbd SQL query to authenticate a user
AuthDBDUserPWQuery "SELECT Password,UserName,Realm,Access FROM authn WHERE user = %s"
</Directory>
認証はうまくいきます!問題はありません。
しかし、ドキュメントに関しては、AuthDBDUserPWQuery から返された余分なフィールドは、環境内のAUTHENTICATION_fieldname変数に入れられます。
ではphpinfo()
、「Apache 環境」の下に正しい値でこれらの変数を表示できます。
AUTHENTICATE_USERNAME
AUTHENTICATE_REALM
AUTHENTICATE_ACCESS
問題
これらの環境変数をphpから取得できません。
1 <?php
2 $Access = apache_getenv('AUTHENTICATE_ACCESS',true);
3 var_dump($Access);
4 ?>
3 行目は、変数が見つからなかったことを示す bool(false) を出力します。
ただし、「HTTP_HOST」などの別の Apache 環境変数に変更すると機能します。
..そして、はい、私も試しgetenv()
ましたが、同じ結果です。
また、Apache サーバーを動作させるには、APR 1.3.0 でコンパイルする必要があることにも注意してください。httpd.apache.org の Apache msi ビルドを使用しましたが、バージョン 2 より上の APR でコンパイルされているようです。それらを見ることができるのでphpinfo()
、PHP からアクセスできる必要があります。