今日は、PHP を使用してオンライン プログラミングの質問に挑戦したいと思います。 Sphere Online Judge では、標準入出力を使用する必要がありますが、最近 PHP を書いていて C は使いたくないのですが、プロジェクトを書くときにフォームを送信することが多いのですが、これについてはまったく考えていなかったので、ドキュメントを読みました。
ドキュメントはこちら: http://php.net/manual/zh/wrappers.php.php
1. PHP STDIN、STDOUT、STDERR の概要:
STDIN
、STDOUT
、STDERR
コマンド入力ストリームと出力ストリームは、コンソール (Linux シェル ターミナル、Windows cmd ターミナル) へのコンテンツの入出力に使用されます。 ), これらはデフォルトで開かれ、直接読み書きできます。CLI (コマンドライン インターフェイス、コマンド ライン インターフェイス) モードでのみ使用できます。HTTP モードでは未定義です。
また、開いているコピー php://stdin
、php://stdout
、php://stderr
もコンテンツを出力できませんhttp ブラウザに移動してテストします。php://stderr
に書き込まれた内容はデフォルト サイトのエラー ログに入力され、他の 2 つは影響しません。
STDIN/STDOUT/STDERR 概要:
元のストリーム | ストリーム オープン コピー | 説明 |
---|---|---|
php://stdin | 標準入力 (標準入力)、読み取り専用、コンソールからコンテンツを入力するために使用されます。 ; | |
php://stdout | 標準出力 (標準出力)、書き込み専用、コンソールへの出力に使用されます | 通常のメッセージ; |
php://stderr | エラー出力 (標準エラー)、書き込み専用、以前はコンソールにレポート出力 | エラー メッセージ; |
、php://stdout
、および php://stderr
。 [推奨学習:
]
2. PHP STDIN の使用法:
PHP 言語の「STDIN」は、次の目的で使用されます。 read from コンソールはコンテンツを読み取ります。この定数が見つかった場合、または
fopen() 関数、php://stdin
を通じて開いた場合、スクリプトはユーザーがコンテンツを入力するまで待機します。ユーザーは Enter キーを押して送信します。 書き込み
テスト:<pre class="brush:php;toolbar:false"><?php
echo "请输入内容:";
$jimmy = fgets(STDIN);
echo sprintf("输入的内容为: %s\n", $jimmy);
$demo = fopen(&#39;php://stdin&#39;, &#39;r&#39;);
echo "请输入: ";
$test = fread($demo, 12); //最多读取12个字符
echo sprintf("输入为: %s\n", $test);
fclose($demo);</pre>
実行結果:
请输入内容:sad 输入的内容为: sad 请输入: asdasdasdasdasdasd 输入为: asdasdasdasd(这里因为设置了最多读取12个字符,设置更多一些就可以完整显示)
3. PHP STDOUT の使用法:
PHP In言語
STDOUT は、標準情報をコンソールに出力するために使用されます。この定数または fopen()
関数によって開かれた php://stdout に書き込みます。内容はコンソールの 標準出力
に直接出力されます。標準出力の内容は、「>」または「」を使用して指定した場所にリダイレクトできます。 1>" などのファイル。 同様に、テストするファイルを作成しましょう
<?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
4. PHP STDERR の使用法:
PHP 言語の「STDERR」エラー情報をコンソールに出力するために使用されます。定数または
fopen()関数によって開かれた「php://stderr」に書き込まれた内容は、コンソールの エラー出力; エラー出力の内容は、「2>」を使用してファイルなどの指定した場所にリダイレクトできます。また、「2>&1#」を使用してエラー出力を標準出力にリダイレクトすることもできます。 ##" は標準出力にマージされます。 テストしてみましょう
<?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写入的错误输出;さて、まず Sphere Online Judge に行ってデモ トピックをテストしてくださいコードを書いてください
<?php // your code here $x=0; while($x!=42){ $x = fgets(STDIN); if($x!=42){ echo sprintf("%d\n",$x); } } ?>送信ハハハハ、全然わかりました、それではJava と C に限定する必要はありません。PHP を使用していくつかの質問に挑戦できます。試してみることもできますか?