PHP не предоставляет PHP-сценариям доступ к переменным Apache.Хотя существует функция для установки переменных среды, сообщается, что она не устанавливает REMOTE_USER.
Вы можете делать то, что хотите, до запуска обработчика PHP и после его завершения, добавив другие обработчики.к этапам до и после работы PHP.Вы можете написать свои функции-обработчики в C;но поскольку вы хотите иметь решение, к которому PHP-программисты могут получить доступ после вас, я считаю, что Python - очень хорошая альтернатива.
mod_python позволяет вам сделать это очень легко.Если вы зайдете на его сайт, вы увидите, что его последнее обновление - февраль 2008 года;но он зрелый и стабильный.Они не продолжают разработку, потому что текущая интеграция Python-Apache продолжается на mod_wsgi вместо mod_python.Поскольку mod_wsgi придерживается WSGI, он не обеспечивает специфичные для Apache функциональные возможности, как это делает mod_python.
После установки mod_python все, что вам нужно, - это написать простые функции, которые будут запускаться, когда вы этого захотите.Ниже приведен пример запуска двух функций до и после PHP, чтобы вы могли получить доступ к cookie-файлу, который был установлен PHP.
Конфигурация 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может импортировать это.Вы можете поместить его в папку site-packages установки Python.
Вот наш модуль 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, чтобы не вызывать бесполезный вызов метода для каждого запроса.