PHPはApache変数へのPHPスクリプトアクセスを提供しません。環境変数を設定するにはfunctionがありますが、REMOTE_USERは設定されていないことが報告されています。
PHPハンドラを開始する前に、PHPハンドラがPHPの動作の前後にフェーズに他のハンドラを追加することで終了します。 Cでハンドラ関数を書くことができます。しかし、PHPプログラマがあなたの後にアクセスできる解決策があることを意味するので、私はPythonが非常に良い選択肢だと考えています。
mod_pythonではこれを非常に簡単に行うことができます。あなたがそのウェブサイトに行くと、その最後の更新が2008年2月であることがわかります。成熟し安定しています。現在のPython-Apacheの統合はmod_pythonの代わりにmod_wsgiで継続されているため、開発を続行しません。 mod_wsgiはWSGIに固執しているので、mod_pythonはApache固有の機能を提供しません。
mod_pythonをインストールした後で、必要なときに実行される単純な関数を書くだけで十分です。以下は、PHPの前後にある2つの関数を実行する例です。そのため、PHPによって設定されたCookieにアクセスできます。
Apacheの設定:
# Enable mod_python:
LoadModule python_module modules/mod_python.so
# Enable it as a handler:
AddHandler mod_python .py
# extension does not matter since we are not setting contentHandlers.
# py files will continue being served as text/plain if you have any of them
# under your document root.
# Handler that will run before PHP:
PythonFixupHandler set_auth_user
# Handler that will run after PHP:
PythonCleanupHandler set_auth_user
この構成では、Pythonはそれをインポートすることができset_auth_user.pyを必要とします。 Pythonインストールのsite-packagesフォルダに置くことができます。ここで
は、Pythonで書かれた私たちのApacheモジュールである:ここで
# -*- coding: utf-8 -*-
from mod_python import apache
def fixuphandler(req):
apache.log_error("starting :"+str(req.headers_out.get('Set-Cookie')))
return apache.OK
def cleanuphandler(req):
apache.log_error("cleaning up: "+str(req.headers_out.get('Set-Cookie')))
req.user='hasanyasin' #this is how you update AUTH_USER
return apache.OK
は、私たちのPHPファイルです:要求がサーバーに行われた後、ここで
<?php
setcookie('abc','foobar');
?>
は私のApacheのログです:
[Sun Jul 01 15:29:31 2012] [error] cleaning up: None
[Sun Jul 01 15:29:31 2012] [error] cleaning up: abc=foobar
私はこれがあなたの問題をあなたの必要とする方法で解決することを願っています。デモンストレーションのために2つのハンドラ関数を追加しました。それらのうちの1つだけが必要な場合は、Apacheの設定で行を削除して、すべての要求に対して無駄なメソッド呼び出しがないようにします。
アーキテクチャに関する詳細、リクエストがスタック全体にどのように流れていくのかなど、詳細を教えてください。 HTTP経由で情報を渡す必要がある場合は、GET/POSTパラメータやヘッダーだけを使用してください。 – galymzhan