3

我正在为 Subversion 编写一个简单的内部前端。多亏了 WebDAV,我们有了一个 Apache 设置来为 SVN 存储库提供服务。此外,身份验证是通过 Apache 领域和 Open Directory 完成的。对于它的价值,这基本上是一个非常普通的 Mac OS X Server 10.6 设置。

现在,我们的前端负责启动的一些任务需要知道调用该操作的用户的用户名。例如,创建存储库需要它,以便我们获得有关谁实际创建它的正确日志。如果我不提供这些信息,SVN 只会使用创建它的进程,在我们的例子中是运行 httpd 的用户。

我在 php 中执行此操作,但我不一定必须使用 php 来实现。如果我可以在 shell 脚本中获取信息,那也很好。重要的是我以某种方式获得了信息。我最初开发的解决方案,因为它正确报告了我的用户名,所以我认为它有效,只是调用:

get_current_user();

但是,这似乎总是返回我的用户名,即使其他用户在登录到领域时开始执行操作。有没有办法获得正确的用户?


编辑:我可能有点太快了,不能在这里开枪。看起来好像前一个变量在一定时间后没有设置。但是,由于没有登录请求,用户仍处于登录状态。因此,以下建议的解决方案并不真正适用。


现在我觉得自己像个 idjit。这个简单的片段有效(尽管很难找到):

$username = $_SERVER["PHP_AUTH_USER"];

然而,这并没有:

$username = apache_getenv("REMOTE_USER");

任何人都知道为什么后者不起作用?我能找到的唯一文档表明这仅适用于 Apache 2。但是,我实际上正在运行 Apache 2,所以这不可能。

4

1 回答 1

4

所以,在google了很长时间之后,我意识到获取用户名的方法几乎随着每一个通过的PHP版本而改变。当前的解决方案似乎是从以下变量中获取数据:

$_SERVER['REMOTE_USER'];

但是,这个变量可能会也可能不会被设置。我可能确实正确地看到了信息的原因是,当我登录到该领域然后访问该领域之外的 PHP 脚本时,该信息是在标头中发送的。信息确实到达了,但并不可靠。

Apache 文档实际上以“哦,顺便说一句”的方式告诉您这一点。我不确定身份验证是否在同一主机上的多个领域进行,但无论如何,这解决了问题。

于 2009-11-16T16:24:39.050 回答