這篇文章介紹的內容是關於PHP 的標準輸入與輸出,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
#今天想在Sphere Online Judge中使用PHP來在線挑戰一些題目,要用到標準輸入輸出,但最近在寫php又不想用c來寫,平時寫項目都是表單提交,還真沒有考慮過這個,於是看了下文檔。
文件在此:http://php.net/manual/zh/wrappers.php.php
##一、PHP STDIN、 STDOUT、STDERR簡介:STDIN、
STDOUT、
STDERR命令輸入輸出流,用於向控制台(linux shell終端、windows cmd終端機)輸入、輸出內容,它們預設是已經開啟的,可以直接對他們進行讀寫操作,它們只能在CLI(command-line interface,命令列介面)模式中使用,在Http模式時,它們是未定義的。
而他們的開啟副本php://stdin
、php://stdout
、php://stderr
也無法輸出內容到http瀏覽器,經測試:寫入php://stderr
的內容將會輸入到預設網站的錯誤日誌中,其它兩種無任何效果。
STDIN/STDOUT/STDERR簡介:
#原始串流 | 串流開啟副本 | 描述 |
---|---|---|
##STDIN | php://stdin#標準輸入(standard input),只讀,用於從控制台輸入內容; |
官方建議使用常數 STDIN、 STDOUT 和 STDERR 來取代它們手動打開的副本封裝器php://stdin
、 php://stdout
和 php: //stderr
。
PHP語言中"STDIN"用於從控制台讀取內容,遇到此常數或透過fopen()
函數打開php://stdin
腳本將會等待使用者輸入內容,直到使用者按下回車鍵提交。
寫個stdin.php
測試一下:
<?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个字符,设置更多一些就可以完整显示)
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"用於向控制台輸出錯誤訊息;向常數、或向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.okSTDOUT写入的正常输出; php://stdout写入的正常输出;☁ test cat demo.errSTDERR写入的错误输出; php://stderr写入的错误输出;
正常輸出和錯誤輸出合併定向到統一檔案:
☁ test php demo.php 1>AllInOne 2>&1☁ test cat AllInOneSTDERR写入的错误输出; 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中文網其他相關文章!