PHP不提供PHP腳本訪問Apache變量。雖然有一個function來設置環境變量,但據報道它不會設置REMOTE_USER。
您可以在PHP處理程序啓動之前執行您想要的操作,並在PHP作品之前和之後添加其他處理程序到階段後結束。你可以用C編寫你的處理函數。但既然你的意思是要有一個PHP程序員可以在你之後訪問的解決方案,我相信Python是一個很好的選擇。
mod_python允許你很容易地做到這一點。如果你去它的網站,你可以看到它的最新更新是2008年2月;但它已經成熟穩定。它們不會繼續開發,因爲當前的Python-Apache集成繼續使用mod_wsgi而不是mod_python。由於mod_wsgi堅持使用WSGI,因此mod_python不提供特定於Apache的功能。
安裝完mod_python之後,你所需要的就是編寫簡單的函數,當你想要的時候就可以運行。下面是在PHP之前和之後運行兩個函數的示例,以便您可以訪問由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
這種配置需要set_auth_user.py其中Python可以導入。你可以把它放在Python安裝的site-packages文件夾中。
這裏是我們的Apache模塊用Python寫的:
# -*- 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
我希望這可以按照你需要的方式解決你的問題。我添加了兩個用於演示的處理函數。如果您只需要其中的一個,請在Apache配置中刪除該行,以便每個請求都不會有無用的方法調用。
您能否提供關於您的架構的更多信息,請求如何流經整個堆棧等?如果您需要通過HTTP傳遞信息,爲什麼不使用GET/POST參數或只是標題? – galymzhan 2012-03-16 18:32:11