我正在为 Subversion 编写一个简单的内部前端。多亏了 WebDAV,我们有一个 Apache 设置为 SVN 存储库提供服务。此外,身份验证是通过 Apache 领域和 Open Directory 完成的。就其值(value)而言,这基本上是一个非常普通的 Mac OS X Server 10.6 设置。
现在,我们的前端负责启动的一些任务需要知道调用操作的用户的用户名。例如,创建存储库需要它,以便我们获得实际创建者的正确日志。如果我不提供此信息,SVN 只会使用创建它的进程,在我们的例子中是运行 httpd 的用户。
我在 php 中执行此操作,但我不一定非要使用 php 来实现它。如果我可以在 shell 脚本中获取信息,那也很好。重要的是我以某种方式获得了信息。我最初开发的解决方案是简单地调用:
get_current_user();
但是,这似乎luôn luôn返回我的用户名,即使其他用户在登录到该领域时开始了操作。有没有办法获得正确的用户?
biên tập:我可能有点仓促行事。看起来好像前一个变量在一定时间后没有设置。但是,由于没有登录请求,用户仍处于登录状态。因此,下面建议的解决方案并不真正适用。
现在我觉得自己像个 idjit。这个简单的片段有效(尽管很难找到):
$username = $_SERVER["PHP_AUTH_USER"];
然而,这并没有:
$username = apache_getenv("REMOTE_USER");
有人知道为什么后者不起作用吗?我能找到的唯一文档表明这只适用于 Apache 2。但是,我实际上运行的是 Apache 2,所以不可能。
因此,在谷歌搜索了很长时间后,我意识到获取用户名的方法几乎随着每一个通过的 PHP 版本而改变。当前的解决方案似乎是从以下变量中获取数据:
$_SERVER['REMOTE_USER'];
但是,这个变量可能会也可能不会被设置。我可能确实正确看到信息的原因是当我登录到该领域然后访问该领域之外的 PHP 脚本时,信息是在标题中发送的。信息确实到达了,但并不可靠。
Apache docs实际上以“哦顺便说一句”的方式告诉你这个 - 时尚。我不确定身份验证是否在同一主机上跨多个领域进行,但无论如何,这解决了问题。
Tôi là một lập trình viên xuất sắc, rất giỏi!