溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用PHP挑戰(zhàn)在線編程題的示例分析

發(fā)布時間:2021-04-02 09:19:13 來源:億速云 閱讀:167 作者:小新 欄目:編程語言

這篇文章主要介紹了使用PHP挑戰(zhàn)在線編程題的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

用PHP挑戰(zhàn)在線編程題

一、PHP STDIN、STDOUT、STDERR簡介: 

STDIN、STDOUT、STDERR命令輸入輸出流,用于向控制臺(linux shell終端、windows cmd終端)輸入、輸出內(nèi)容,它們默認是已經(jīng)打開的,可以直接對他們進行讀寫操作,它們只能在CLI(command-line interface,命令行界面)模式中使用,在Http模式時,它們是未定義的。

而他們的打開副本php://stdin、php://stdout、php://stderr 也無法輸出內(nèi)容到http瀏覽器,經(jīng)測試:寫入php://stderr的內(nèi)容將會輸入到默認站點的錯誤日志中,其它兩種無任何效果。

STDIN/STDOUT/STDERR簡介:

原始流流打開副本描述
STDINphp://stdin標(biāo)準(zhǔn)輸入(standard input),只讀,用于從控制臺輸入內(nèi)容;
STDOUTphp://stdout標(biāo)準(zhǔn)輸出(standard output),只寫,用于向控制臺輸出正常信息
STDERRphp://stderr錯誤輸出(standard error),只寫,用于向控制臺輸出錯誤信息;

官方推薦使用常量 STDIN、 STDOUT 和 STDERR 來代替它們手動打開的副本封裝器php://stdin、 php://stdoutphp://stderr。

二、PHP STDIN用法:

PHP語言中"STDIN"用于從控制臺讀取內(nèi)容,遇到此常量或者通過fopen()函數(shù)打開php://stdin腳本將會等待用戶輸入內(nèi)容,直到用戶按下回車鍵提交。

寫個stdin.php測試一下:

<?php
echo "請輸入內(nèi)容:";
$jimmy = fgets(STDIN);
echo sprintf("輸入的內(nèi)容為: %s\n", $jimmy);
 
$demo = fopen('php://stdin', 'r');
echo "請輸入: ";
$test = fread($demo, 12); //最多讀取12個字符
echo sprintf("輸入為: %s\n", $test);
fclose($demo);

運行結(jié)果:

請輸入內(nèi)容:sad
輸入的內(nèi)容為: sad

請輸入: asdasdasdasdasdasd
輸入為: asdasdasdasd(這里因為設(shè)置了最多讀取12個字符,設(shè)置更多一些就可以完整顯示)
三、PHP STDOUT用法:

PHP語言中STDOUT用于向控制臺輸出標(biāo)準(zhǔn)信息;向此常量、或者向fopen()函數(shù)打開的php://stdout寫入的內(nèi)容將直接輸出到控制臺的標(biāo)準(zhǔn)輸出;標(biāo)準(zhǔn)輸出的內(nèi)容可以用過">"或者"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()函數(shù)打開的"php://stderr"寫入的內(nèi)容將直接輸出到控制臺的錯誤輸出;錯誤輸出的內(nèi)容可以用過"2>"重定向到指定地方,比如文件;也可以使用"2>&1"將錯誤輸出定向到標(biāo)準(zhǔn)輸出,與標(biāo)準(zhǔn)輸出合并。

我們測試一下

<?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寫入的錯誤輸出;

正常輸出和錯誤輸出合并定向到統(tǒng)一文件:

?  test  php demo.php 1>AllInOne 2>&1
?  test  cat AllInOne
STDERR寫入的錯誤輸出;
STDOUT寫入的正常輸出;
php://stdout寫入的正常輸出;
php://stderr寫入的錯誤輸出;

好了,接下來可以去Sphere Online Judge叱咤風(fēng)云了,先測試個demo題目

寫個代碼

<?php
    // your code here
$x=0;
while($x!=42){
   $x = fgets(STDIN);
   if($x!=42){
   echo sprintf("%d\n",$x);
}
}
?>

感謝你能夠認真閱讀完這篇文章,希望小編分享的“使用PHP挑戰(zhàn)在線編程題的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI