如何让 get_current_user() 返回与 $_SERVER['AUTH_USER'] 相同的用户?

如何让 get_current_user() 返回与 $_SERVER['AUTH_USER'] 相同的用户?

我有一个使用 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 年历史的错误。您应该更新脚本。

它不应该返回已登录的用户。它应该返回所有者脚本文件。

php.net/获取当前用户

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 在您的配置下以登录用户的身份运行脚本。

相关内容