Чтение стандартного потока ввода

Odd

Новичок
Чтение стандартного потока ввода

Возвращаясь к теме об
apache piped log.

В документации к апачу сказано, что при использовании piped logа программа получает "log information" из стандартного потока ввода.

PHP:
$handle = fopen("php://stdin", "r");  
while (!feof($handle)) {  
  $buffer = fgets($handle, 100);//подвисает в этом месте     
  echo $buffer;  
}  
fclose($handle);
И ничего скрипт не выводит. Как можно решить эту проблему?
 

svetasmirnova

маленький монстрик
А зачем ты так извращаешься? Консольное же приложение тоже читает из stdin. Т.е. надо просто читать данные из массива $args.
Вот по такому принципу:
PHP:
file_put_contents('piped_log.txt',
                  $argv[1] . "\n" .
                  file_get_contents('piped_log.txt'));
Да, и выводить ты куда собрался?
 

Odd

Новичок
Я, может, чего-то не понимаю. Но при запуске пхп скрипта как piped log массив $argv выглядит след образом
Array
(
[0] => d:/web/log.php
)

Да и не может там ничего быть - скрипт для чтения лога должен висеть резидентно
 

Odd

Новичок
В смысле help смотреть? Пробовал! Ничё не вышло... :(
 

svetasmirnova

маленький монстрик
=))))))))))))))))))))))))
Нет, походить по страничкам сайта, для которого огород городится.
 

svetasmirnova

маленький монстрик
Молодец, а в файл, в который пишется, смотреть не пробовал? Или ты echo - ом в /dev/null до сих пор выводишь?
 

svetasmirnova

маленький монстрик
Кстати да, my fault: твой конфиг из соседнего топика скопи-пастила бездумно, Apache сам в лог пишет. Ну ни чего: выход-то всегда есть =)
 

Odd

Новичок
Ну, спасибо. Хотя мне бы выход в нужном направлении...
=)
 

svetasmirnova

маленький монстрик
Кстати, такая проблема обнаружилась:
http://www.php.net/manual/ru/features.commandline.php
CLI SAPI имеет три различных способа получения PHP-кода, который необходимо выполнить:
1. Указать PHP на исполнение конкретного файла.
..
2. Указать PHP-код для выполнения непосредственно в командной строке.
...
3. Предоставить PHP-код для выполнения посредством стандартного потока stdin.
...
Вы не можете комбинировать эти три способа выполнения кода.
 

Odd

Новичок
А в чём здесь проблема? Я так понимаю, что
3. Предоставить PHP-код для выполнения посредством стандартного потока stdin.
означает, чо программа будет писать на stdin php код, который тот будет исполнять
 

Odd

Новичок
Какая-нибудь:)

Это позволяет динамически создавать PHP-код и переадресовывать его исполняемому модулю, как показано в следующем (вымышленном) примере:

$ some_application | some_filter | php | sort -u >final_output.txt
-~{}~ 05.09.05 09:31:

Кто-нибудь ещё может что-нибудь предложить?
 

Profic

just Profic (PHP5 BetaTeam)
1) [m]features.command-line[/m] на предмет "Облегчена работа с консолью, благодаря следующим определенным константам"
2) Приведенный скрипт ничего не выводит, т.к. скорее всего нечего выводить :) или некуда :)

E:\work\web\SDN\recipe-nddocs\cpp>copy con test.php
PHP:
<?php
$fp = fopen('out.txt', 'wb');
while ($buf = fread(STDIN, 1024)) {
	fwrite($fp, $buf);
}
?>
^Z
1 file(s) copied.

E:\work\web\SDN\recipe-nddocs\cpp>type con | php test.php
string1
line2
row3
^Z

E:\work\web\SDN\recipe-nddocs\cpp>type out.txt
string1
line2
row3

E:\work\web\SDN\recipe-nddocs\cpp>
 
Сверху