Проблема с Apache Piped Log

Odd

Новичок
Проблема с Apache Piped Log

Апач 1.3.28 под виндой. Использую Piped Log следующим образом:
PHP:
LogFormat "%>s %u \"%U\"" me
CustomLog logs/log.txt me
CustomLog "|php -f d:/web/check.php" me
Пашет, но как-то странно: скрипт вызывается всего 3 раза: 2 при старте апача и 1 при первом обращении к документам сервера, в то время как в log.txt пишется всё ОК.

Попытка изменить строку на
PHP:
CustomLog "| d:/web/check.php" me
ни фига не даёт - тогда вообще начинает запускаться пхп-редактор

Подскажите, что с этим можно сделать
 

si

Administrator
а pipe и открывается 1 раз, и потом в него пишется, а не так что при каждой записи в лог запускается заново (2 раза при старте это особености старта апача)
 

Odd

Новичок
А как дальше оттуда читать?

$handle = fopen("php://stdin", "r");
while (!feof($handle)) {
$buffer = fgets($handle, 100);//скрипт подвисает в этом месте
echo $buffer;
}
fclose($handle);
не катит
 

AnToXa

prodigy-одаренный ребенок
там рядом в документации есть директива TransferLog
 

Odd

Новичок
<?php
$buffer = fread(STDIN, 1024);
echo $buffer;
?>
Use of undefined constant STDIN

-~{}~ 04.09.05 13:08:

AnToXa

Эффект тот же самый.
Да и отличаются они только тем, что в Transfer Log не нужно указывать nick для способа вывода loga
 

alpine

Новичок
Odd
Под виндой кажется так нужно запускать ПХП в командной строке для работы в консоли для версии php > 4.3.0:
Код:
CustomLog "| буква_диска_где_пхп:\путь_к_пхп\cli\php.exe d:\web\check.php" me
 

Odd

Новичок
А с этим всё в порядке. У меня php прописан в PATH
 

Odd

Новичок
Запускал piped log через CLI
Код:
<?php
   $line = fread(STDIN, 10);
   echo $line;
?>
В консоли апача никакого результата
 

msdev

Новичок
а почему ты ждешь что Apache будет вывод из твоей программы выводить на экран или еще куда-то?
вот из документации пример вызова
CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
здесь программа rotatelogs сама открывает лог файл и записывает туда то что прочитала из STDIN.
Если тебе нужен вывод в консоль апача попробуй вывод в своем скрипте в STDERR, но я делать это не пробовал.
 

Odd

Новичок
Спасибо!!! Выручил. У меня апач работает как консольный процесс, поэтому всё, что выводил php-скрипт в самом начале шло на консоль, а потом нет

Так что

$handle = fopen("php://stdin", "r");
$r= fopen("d:/temp/apache.log", "a+");
while (!feof($handle)) {
$buffer = fgets($handle, 100);
fwrite($r, $buffer);
fflush($r);
}
fclose($handle);
fclose($r);

работающий вариант
 

alpine

Новичок
Odd
А вот ты можешь описать алгоритм работы скрипта который ты родил своими словами(просто интересно)?
 

Odd

Новичок
А чего бы и нет?:)
Когда юзер лазит по серваку, вся информация, куда он идёт, передаётся скрипту. И когда скрипт решает, что юзеру хватит ходить, где попало, через .htaccess и .htpasswd отрубает его

Однако заклинило меня здорово: несколько дней разбирался, что не так;)
 
Сверху