背景
我有一个 Apache/2.2.15 (Win32) 和 PHP/5.3.2 设置,处理身份验证。
<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.ini 中获取这些环境变量。
1 <?php
2 $Access = apache_getenv('AUTHENTICATE_ACCESS',true);
3 var_dump($Access);
4 ?>
第 3 行打印 bool(false) 表示未找到变量!
但是,如果我更改为另一个 Apache 环境变量,例如“HTTP_HOST”,它就可以工作。
..是的,我也试过了getenv()
,同样的结果。
还有一点需要注意,Apache 服务器需要用 APR 1.3.0 编译才能工作。我使用了来自 httpd.apache.org 的 Apache msi 构建,它似乎是使用高于版本 2 的 APR 编译的。因为我可以看到它们,phpinfo()
所以它们必须可以从 PHP 访问。