Разработчику. Сборник рецептов PHP
Задавайте вопросы

Взаимодействие в рамках Apache

Вернуться назад

Задача

Необходимо взаимодействовать из 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

См. также

Документацию по функции apache_note() на http://www.php.net/apache-note; информацию по журналированию в Apache на http://httpd.apache.org/docs/mod/mod_log_config.html.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ