URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 3317
[ Назад ]

Исходное сообщение
"Дублирование записей access.log Apache в базе MySQL"

Отправлено Yelena , 17-Май-05 16:35 
Подскажите, пожалуйста, как можно обрабатывать строку запроса при помощи PHP-скрипта (именно PHP) прежде, чем она будет записана в access.log.
Можно ли это сделать при помощи директив Apache?
И как сделать так, чтобы это решение работало и под Unix, и под Windows?

Содержание

Сообщения в этом обсуждении
"Дублирование записей access.log Apache в базе MySQL"
Отправлено gr , 18-Май-05 02:57 
>Подскажите, пожалуйста, как можно обрабатывать строку запроса при помощи PHP-скрипта (именно PHP)
>прежде, чем она будет записана в access.log.
>Можно ли это сделать при помощи директив Apache?
>И как сделать так, чтобы это решение работало и под Unix, и
>под Windows

общее направление: piped log

Что-то типа CustomLog  "|/path/to/phpscript"

и строчка будет поступать на вход скрипта.
имеется некоторое количество подводных камней, но в целом работает
нормально на достаточно нагруженом сервере

При этом можно добавить и обычный CustomLog

Читать http://httpd.apache.org/docs/logs.html#piped

что-то готовое вот http://logtomysql.sourceforge.net/


"Дублирование записей access.log Apache в базе MySQL"
Отправлено gr , 18-Май-05 03:10 
>>Подскажите, пожалуйста, как можно обрабатывать строку запроса при помощи PHP-скрипта (именно PHP)
>>прежде, чем она будет записана в access.log.
>>Можно ли это сделать при помощи директив Apache?
>>И как сделать так, чтобы это решение работало и под Unix, и
>>под Windows
>
>общее направление: piped log
>
>Что-то типа CustomLog  "|/path/to/phpscript"
>
>и строчка будет поступать на вход скрипта.
>имеется некоторое количество подводных камней, но в целом работает
>нормально на достаточно нагруженом сервере
>
>При этом можно добавить и обычный CustomLog
>
>Читать http://httpd.apache.org/docs/logs.html#piped
>
>что-то готовое вот http://logtomysql.sourceforge.net/


Что называется "ответил на поставленный вопрос"

Как я понимаю вам нужно некие данные, имеющиеся в логах писать в БД, если так, то все, что пишется в логи, доступно в php скрипте в переменных окружения. Недостающие переменные окружения легко добавить - (если например речь идет о степени сжатия mod_deflate и тд) http://httpd.apache.org/docs/env.html


"Дублирование записей access.log Apache в базе MySQL"
Отправлено Yelena , 19-Май-05 17:11 
Спасибо за общее направление - piped log. :)

>
>Как я понимаю вам нужно некие данные, имеющиеся в логах писать в
>БД, если так, то все, что пишется в логи, доступно в
>php скрипте в переменных окружения. Недостающие переменные окружения легко добавить -
>(если например речь идет о степени сжатия mod_deflate и тд) http://httpd.apache.org/docs/env.html
>

а дальше в httpd.conf

CustomLog "| c:/php/cli/php.exe d:/site/htdocs/test.php" combined
или
CustomLog "| c:/usr/bin/perl.exe d:/site/cgi-bin/test.cgi" combined

cgi-скрипт читает строки из stdin (переменные окружения не потребуются)

примеры
PHP:
<?
$fp = fopen ("php://stdin", "r");
$fp1 = fopen ("d:/site/htdocs/test.txt", "a");
while ($line = fgets($fp))
{
  if (preg_match('/^([^ ]+) ([^ ]+) ([^ ]+) \[([^\]]+)\] "([^" ]+) ([^" ]+) ([^" ]+)" (\d+) (\d+) "([^" ]+)" "(.+)"/',  $line, $matches))
  {
    $results = print_r($matches, true);
    fputs($fp1, $results);
  }
}
fclose($fp1);
fclose($fp);
?>

Perl:
#!/usr/bin/perl

while(<STDIN>)
{
обработка строки
}