3

Subversion の簡単な社内フロントエンドを作成しています。WebDAV のおかげで、SVN リポジトリを提供する Apache セットアップができました。また、認証は Apache レルムと Open Directory を介して行われます。価値のあるものとして、これは基本的にかなりバニラの Mac OS X Server 10.6 セットアップです。

ここで、フロントエンドが開始を担当するタスクのいくつかは、アクションを呼び出すユーザーのユーザー名を知る必要があります。たとえば、リポジトリの作成には、実際に誰が作成したかの適切なログを取得するために必要です。この情報を提供しない場合、SVN はそれを作成したプロセスを使用します。この場合は、httpd を実行しているユーザーです。

これはphpで行っていますが、必ずしもphpを使用して実装する必要はありません。シェル スクリプトで情報を取得できれば、それも問題ありません。重要なのは、私が何らかの方法で情報を取得することです。私が最初に開発したソリューションは、ユーザー名が正しく報告されたので機能すると想定していましたが、次のように呼び出しているだけです。

get_current_user();

ただし、レルムにログインしているときに他のユーザーがアクションを開始している場合でも、これは常に私のユーザー名を返すようです。正しいユーザーを取得する方法はありますか?


編集:ここで銃をジャンプするには少し速すぎたかもしれません. 一定の時間が経過しても前の変数が設定されないように見えます。ただし、ログイン要求がないため、ユーザーはログインしたままです。したがって、以下に提案する解決策は実際には適用できません。


今、私はidjitのように感じます. この単純なスニペットは機能しました (見つけるのは困難でしたが)。

$username = $_SERVER["PHP_AUTH_USER"];

ただし、これはしませんでした:

$username = apache_getenv("REMOTE_USER");

後者が機能しない理由について誰かが考えましたか? 私が見つけた唯一のドキュメントは、これがApache 2でのみ機能することを示唆しています.しかし、私は実際にはApache 2を実行しているので、そうではありません.

4

1 に答える 1

4

そのため、長い間グーグルで検索した後、ユーザー名を取得する方法が、PHP バージョンのほとんどすべてで変更されていることに気付きました。現在の解決策は、次の変数からデータを取得することです。

$_SERVER['REMOTE_USER'];

ただし、この変数は設定される場合と設定されない場合があります。おそらく情報が正しく表示された理由は、レルムにログインしてから、そのレルムの外部にある PHP スクリプトにアクセスしたときに、ヘッダーで情報が送信されたためです。情報は届きましたが、信頼できませんでした。

Apacheのドキュメントでは、実際にこれを「ああ、ところで」のように説明しています。認証が同じホスト上の複数のレルムに引き継がれるかどうかはわかりませんが、いずれにしても問題は解決しました。

于 2009-11-16T16:24:39.050 に答える