Задача
Необходимо взаимодействовать из PHP с другими частями процесса Apache, обрабатывающего запрос. Это включает установку переменных в файле access_log.
Решение
Это делается при помощи функции apache_note():
// получаем значение
$session = apache_note('session');
// устанавливаем значение
apache_note('session', $session);
Обсуждение
Обрабатывая запрос клиента, Apache совершает ряд шагов, а PHP представляет только одно звено в целой цепи. Apache также переопределяет URL, идентифицирует пользователей, регистрирует запросы и делает многое другое. Во время обработки запроса каждый обработчик имеет доступ к множеству пар ключ/значение, называемому notes table.
Функция apache_note() обеспечивает доступ к этому множеству, чтобы получить информацию, установленную обработчиком на ранней стадии процесса, и оставить эту информацию для обработчика на более поздней стадии.
Например, если для идентификации пользователей и сохранения значений переменных во время запроса используется модуль сеанса, то это можно объединить с анализом файла журнала, и поэтому можно определить среднее количество просмотров страницы в расчете на одного пользователя. Совместное применение функции apache_note() и журнального модуля позволяет записать идентификатор сеанса прямо в файл access_log для каждого запроса:
// извлекаем идентификатор сеанса и добавляем его
// в множество notes table веб-сервера Apache
apache_note('session_id', session_id());
Затем модифицируйте файл httpd.conf, добавляя следующую строку к LogFormat:
%{session_id}n
Заключительный символ n указывает Apache на необходимость использовать переменную, сохраненную в его таблице уведомлений (notes table) другим модулем.
Если PHP скомпилирован с параметром конфигурации --enable-memory-limit, то он запоминает максимальный размер памяти, занимаемой каждым запросом, в его записи, называемой mod_php_memory_usage. Добавьте информацию о распределении памяти в LogFormat:
%{mod_php_memory_usage}n