我有一个使用 LDAP 进行登录的 PHP 应用程序。该应用程序在带有 IIS 的 Windows Server 上运行。
过去,我曾经用来$_SERVER['AUTH_USER']
获取正在使用该应用程序的远程 Windows 用户:
$user = $_SERVER['AUTH_USER'];
然后我将其改为:
$user = get_current_user();
两者均返回相同的值——当前正在使用该网站的 Windows 用户名。
例如,如果我的 Windows 用户名是,some_user
那么它会检测并使用它。
但是最近发生了一些事情,现在get_current_user();
返回了另一个用户,该用户是 PHP 项目文件夹权限列表中的用户之一。
我不确定它为什么会改变,但我必须将所有内容改回使用$user = $_SERVER['AUTH_USER'];
。
但是我该如何修复它并让get_current_user()
读取从另一台 Windows 机器使用该网站的用户而不是本地 Windows Server 用户呢?
答案1
PHP 修复了一个已有 15 年历史的错误。您应该更新脚本。
它不应该返回已登录的用户。它应该返回所有者脚本文件。
get_current_user(): string
返回当前 PHP 脚本所有者的名称。
其中一条评论注意到这在 Windows 上不起作用:
get_current_user() 返回的信息似乎取决于平台。
使用在 Windows NT 上以 CGI 形式运行的 PHP 5.1.1 和 IIS 5.0,get_current_user() 返回运行脚本的进程的所有者,不是脚本本身的所有者。
预期行为是获取文件的所有者;而不是执行脚本的用户。
您或许应该坚持使用$_SERVER['AUTH_USER']
。
它之所以能正常工作是因为 PHP 有一个 bug,和IIS 在您的配置下以登录用户的身份运行脚本。