首頁  >  文章  >  後端開發  >  我可以用PHP挑戰線上程式設計題了!

我可以用PHP挑戰線上程式設計題了!

藏色散人
藏色散人轉載
2021-04-01 17:27:012712瀏覽

我可以用PHP挑戰線上程式設計題了!

用PHP挑戰線上程式設計題

#今天想在Sphere Online Judge中用PHP來線上挑戰一些題目,要用到標準輸入輸出,但最近在寫php又不想用c來寫,平時寫項目都是表單提交,還真沒有考慮過這個,於是看了下文檔。

文件在此:http://php.net/manual/zh/wrappers.php.php

一、PHP STDIN、STDOUT、STDERR簡介: 

STDINSTDOUTSTDERR命令輸入輸出流,用於向控制台(linux shell終端、windows cmd終端)輸入、輸出內容,它們預設是已經開啟的,可以直接對他們進行讀寫操作,它們只能在CLI(command-line interface,命令列介面)模式中使用,在Http模式時,它們是未定義的。

而他們的開啟副本php://stdinphp://stdoutphp://stderr 也無法輸出內容到http瀏覽器,經測試:寫入php://stderr的內容將會輸入到預設網站的錯誤日誌中,其它兩種沒有任何效果。

STDIN/STDOUT/STDERR簡介:

#原始串流 串流開啟副本 描述
##STDIN php://stdin#標準輸入(standard input),只讀,用於從控制台輸入內容;
STDOUT

php://stdout#標準輸出(standard output),只寫,用於輸出到主機正常訊息

STDERR
php://stderr

錯誤輸出(standard error),只寫,用於向控制台輸出

錯誤訊息

;

官方建議使用常數 STDIN、 STDOUT 和 STDERR 來取代它們手動開啟的副本封裝器

php:// stdinphp://stdout

php://stderr

【推薦學習:

PHP影片教學二、PHP STDIN用法:PHP語言中"STDIN」用於從控制台讀取內容,遇到此常數或透過fopen()函數開啟php://stdin腳本將會等待使用者輸入內容,直到使用者按下回車鍵提交。 寫個

stdin.php

測試一下:

<?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);

運行結果:

请输入内容:sad
输入的内容为: sad

请输入: asdasdasdasdasdasd
输入为: asdasdasdasd(这里因为设置了最多读取12个字符,设置更多一些就可以完整显示)

三、PHP STDOUT用法:

PHP語言中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

四、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叱吒風雲了,先測試個demo題目######寫個代碼###
<?php
    // your code here
$x=0;
while($x!=42){
   $x = fgets(STDIN);
   if($x!=42){
   echo sprintf("%d\n",$x);
}
}
?>
###提交######哈哈哈哈,完全ok,再也不用限制在java和c了,我可以用PHP挑戰一些題目了,大家也可以去試試?#######

以上是我可以用PHP挑戰線上程式設計題了!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除