Я пишу простой внутренний интерфейс для Subversion. У нас есть настройка Apache для обслуживания SVN-репозиториев благодаря WebDAV. Кроме того, аутентификация выполняется через область Apache и Open Directory. Что бы это ни стоило, это в основном довольно милая установка Mac OS X Server 10.6.
Теперь, некоторые задачи, за которые отвечает наш интерфейс, должны знать имя пользователя, вызывающего действие. Например, для создания репозитория это необходимо, чтобы мы могли получить надлежащие журналы того, кто на самом деле его создал. Если я не предоставляю эту информацию, SVN просто использует процесс, который ее создал, в нашем случае это пользователь httpd.
Я делаю это в php, но мне не обязательно реализовывать это с помощью php. Если я могу получить информацию в сценарии оболочки, это тоже хорошо. Важно то, что я каким-то образом получаю информацию. Первое разработанное мной решение, которое, как я предполагал, сработало, поскольку оно правильно сообщило мое имя пользователя, просто вызывает:
get_current_user();
Однако, похоже, всегда возвращает мое имя пользователя, даже если какой-то другой пользователь запускает действие при входе в область. Есть ли способ получить правильного пользователя?
РЕДАКТИРОВАТЬ: Возможно, я был слишком быстр, чтобы прыгнуть пистолет здесь. Похоже, что первая переменная не устанавливается через определенное время. Тем не менее, пользователь все еще вошел в систему, так как нет запроса на вход. Таким образом, предложенное ниже решение на самом деле не применимо.
Теперь я чувствую себя как идёт. Этот простой фрагмент работал (хотя его было трудно найти):
$username = $_SERVER["PHP_AUTH_USER"];
Однако это не так:
$username = apache_getenv("REMOTE_USER");
Кто-нибудь понял, почему последний не работает? Единственные документы, которые я смог найти, предполагают, что это работает только на Apache 2. Однако на самом деле я использую Apache 2, так что это не могло быть.