PHP пишет много текста в STDERR

При написании большого фрагмента в STDOUT в PHP вы можете сделать это:

echo <<<END_OF_STUFF
lots and lots of text
over multiple lines
etc.etc
END_OF_STUFF;

(т.е. heredoc)

Мне нужно сделать что-то подобное, но < <22 > . Есть ли другая команда, например echo, но вместо нее использует STDERR?

Ответ 1

Да, используя php://stream wrapper: http://php.net/manual/en/wrappers.php.php

$stuff = <<<END_OF_STUFF
lots and lots of text
over multiple lines
etc.etc
END_OF_STUFF;

$fh = fopen('php://stderr','a'); //both (a)ppending, and (w)riting will work
fwrite($fh,$stuff);
fclose($fh);

Ответ 2

Для простого решения - попробуйте это

file_put_contents('php://stderr', 'This text goes to STDERR',FILE_APPEND);

Параметр FILE_APPEND будет добавлять данные и не перезаписывать их. Вы также можете напрямую писать в поток ошибок с помощью функций fopen и fwrite.

Дополнительную информацию можно найти на странице http://php.net/manual/en/features.commandline.io-streams.php

Ответ 3

В CLI SAPI это может быть так же просто, как передать строку Heredoc в качестве аргумента fwrite() с константой STDERR.

fwrite(STDERR, <<< EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD
);