Есть код, который нельзя менять PHP: // STDOUT - php://stdout fwrite(STDOUT, $data); Код выполняется в CLI. Необходимо перехватить управление выводом указанного потока, проще говоря не надо выводить в консоль, надо сохранить вывод в файл например. Гугл сказал думать в сторону `stream_wrapper_register`, я попробовал написать такое, но результат ноль. PHP: class PhpStream { public function stream_write($data) { file_put_contents( __DIR__ . '/storage', $data); } } stream_wrapper_unregister('php'); stream_wrapper_register('php', 'PhpStream'); fwrite(STDOUT, 'test'); //все равно пишет в консоль Че делать ?
Добавить потоковый фильтр для STDOUT. PHP: class balckhole_filter extends php_user_filter { function filter($in, $out, &$consumed, $closing) { while ($bucket = stream_bucket_make_writeable($in)) { file_put_contents('out.txt', $bucket->data, FILE_APPEND); } return PSFS_PASS_ON; } } stream_filter_register("balckhole", "balckhole_filter"); $filter = stream_filter_prepend(STDOUT, "balckhole"); fwrite(STDOUT, "bla bla bla\n"); stream_filter_remove($filter);
STDOUT это уже открытый поток вывода, а твой вариант работает для потоков которые будут отрываться используя fopen('php://stdout', 'w');