перехват потоков stdinout

romy4

invoke [brain]
перехват потоков stdinout

Каким образом можно перехватить поток php://stdin и php://stdout?
то есть чтобы, например, echo "something"; обратавылось моим обработчиком, а не выводилось прямо в браузер/tty?

зыж нужен не фильтр потока, а именно обработчик.
кажется вроде stream_wrapper_register надо использовать.

зызыж я спать хочу, поэтому с трудом соображаю, а проблему надо решить.
F1please
 

romy4

invoke [brain]
senich. не. понимаешь ob - Всего лишь буффер. его можно считывать, но нельзя изменять.
задача стоит в том, чтобы буферить данные и анализировать по ходу, что выводятся в stdout. затем окончательно их отфильтровать и выкинуть уже в нормальный stdout
 

romy4

invoke [brain]
senich как?

-~{}~ 20.03.06 19:08:

не, ну можно делать ob_get_contents потом ob_clean потом опять загонять в поток, но это больше похоже на изврат

-~{}~ 20.03.06 19:09:

тю. я торможу. можно ж ставить callback_function
 

senich

Новичок
у Тебя есть другие предложения? я точного ответа на Твой вопрос не знаю но имхо поскольку пхп это скриптовой язык то переопределения обработчиков прерываний в нём нет.
 

senich

Новичок
можно чуть подробнее? про callback а то что идею я не совсем уловил
 

romy4

invoke [brain]
из мануала:
bool ob_start ( [callback output_callback [, int chunk_size [, bool erase]]] )

имеет возможность использовать функцию фильтрации потока
string callback_function(string buffer, [int flags])

то есть функция возвращает измененный буффер.
хотя это подходит мне, но мне не нужно возвращать буффер, а его надо накапливать. и в последствии еще раза два-три пройтись по нему фильтрами. из-за чего я делаю вывод, что ob_* использовать геморойно.

stream_wrapper - то что надо, только вот как его подключить к php://stdin php://stdout?
 

senich

Новичок
а ну всё. просто мне на секунду показалось что Ты собрался классы какие то писать переопределять функции =)) ну как оказалось - показалось
 

romy4

invoke [brain]
я нашел способ (подробно изучив ман): через stream_filter_append
 
Сверху