Today I want to use PHP to challenge some online programming questions in Sphere Online Judge , you need to use standard input and output, but I am writing PHP recently and don’t want to use C. I usually submit forms when writing projects. I really haven’t considered this, so I read the documentation.
The document is here: http://php.net/manual/zh/wrappers.php.php
1. Introduction to PHP STDIN, STDOUT, STDERR:
STDIN
, STDOUT
, STDERR
command input and output streams are used to input and output content to the console (linux shell terminal, windows cmd terminal), they They are opened by default and can be read and written directly. They can only be used in CLI (command-line interface, command line interface) mode. In HTTP mode, they are undefined.
And their open copies php://stdin
, php://stdout
, php://stderr
cannot output the content either Go to the http browser and test: the content written to php://stderr
will be entered into the error log of the default site, and the other two have no effect.
STDIN/STDOUT/STDERR Introduction:
Original stream | Stream open copy | Description |
---|---|---|
STDIN | php://stdin | Standard input (standard input), read-only, used to input content from the console; |
STDOUT | php://stdout | Standard output (standard output), write-only, used to output to the consoleNormal Message; |
STDERR | php://stderr | Error output (standard error), write-only, used to report to the console OutputError message; |
php:// stdin,
php://stdout and
php://stderr.
PHP video tutorial]
2. PHP STDIN usage: "STDIN" in PHP language is used to read from The console reads the content. When encountering this constant or opening it through the fopen() function,
php://stdin the script will wait for the user to input content until the user presses the Enter key to submit. .
stdin.phpTest it:
<?php echo "请输入内容:"; $jimmy = fgets(STDIN); echo sprintf("输入的内容为: %s\n", $jimmy); $demo = fopen('php://stdin', 'r'); echo "请输入: "; $test = fread($demo, 12); //最多读取12个字符 echo sprintf("输入为: %s\n", $test); fclose($demo);
请输入内容:sad 输入的内容为: sad 请输入: asdasdasdasdasdasd 输入为: asdasdasdasd(这里因为设置了最多读取12个字符,设置更多一些就可以完整显示)
STDOUT is used to output standard information to the console; write to this constant or to
php://stdout opened by the fopen() function. The content will be output directly to the
standard output of the console; the content of the standard output can be redirected to the specified place using ">" or "1>" , such as files. Similarly, let’s write a file to test it
<?php fwrite(STDOUT, "通过STDOUT写入;\n"); $demo = fopen("php://stdout", "w"); fwrite($demo, "通过php://stdout写入;"); fclose($demo);
☁ test php demo.php > a.txt ☁ test cat a.txt 通过STDOUT写入; 通过php://stdout写入;% ☁ test php demo.php 通过STDOUT写入; 通过php://stdout写入;% ☁ test
fopen() function will be directly output to the console's error output; The error output content can be redirected to a specified place, such as a file, using "2>"; the error output can also be directed to standard output using "2>&1" , merged with standard output.
Let’s test it<?php fwrite(STDERR, "STDERR写入的错误输出;\n"); fwrite(STDOUT, "STDOUT写入的正常输出;\n"); $stdout = fopen("php://stdout", "w"); fwrite($stdout, "php://stdout写入的正常输出;\n"); fclose($stdout); $stderr = fopen("php://stderr", "w"); fwrite($stderr, "php://stderr写入的错误输出;\n"); fclose($stderr);
☁ test php demo.php 1>demo.ok 2>demo.err ☁ test cat demo.ok STDOUT写入的正常输出; php://stdout写入的正常输出; ☁ test cat demo.err STDERR写入的错误输出; php://stderr写入的错误输出;
☁ test php demo.php 1>AllInOne 2>&1 ☁ test cat AllInOne STDERR写入的错误输出; STDOUT写入的正常输出; php://stdout写入的正常输出; php://stderr写入的错误输出;
<?php // your code here $x=0; while($x!=42){ $x = fgets(STDIN); if($x!=42){ echo sprintf("%d\n",$x); } } ?>