我正在为 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,所以这不可能。