Подскажите, пожалуйста, как можно обрабатывать строку запроса при помощи PHP-скрипта (именно PHP) прежде, чем она будет записана в access.log.
Можно ли это сделать при помощи директив Apache?
И как сделать так, чтобы это решение работало и под Unix, и под Windows?
>Подскажите, пожалуйста, как можно обрабатывать строку запроса при помощи 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-скрипта (именно 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
Спасибо за общее направление - 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" combinedcgi-скрипт читает строки из 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/perlwhile(<STDIN>)
{
обработка строки
}