PHP 的標準輸入與輸出

來源:互聯網
上載者:User
這篇文章介紹的內容是關於PHP 的標準輸入與輸出,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

簡述 PHP 的標準輸入與輸出


7個月前 ⋅ 956 ⋅ 11 ⋅ 0




今天想在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://stdoutphp://stderr

二、PHP STDIN用法:

PHP語言中"STDIN"用於從控制台讀取內容,遇到此常量或者通過fopen()函數開啟php://stdin指令碼將會等待使用者輸入內容,直到使用者按下斷行符號鍵提交。

寫個stdin.php測試一下:

<?phpecho "請輸入內容:";$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用法:

 PHP語言中STDOUT用於向控制台輸出標準資訊;向此常量、或者向fopen()函數開啟的php://stdout寫入的內容將直接輸出到控制台的標準輸出;標準輸出的內容可以用過">"或者"1>"重新導向到指定地方,比如檔案。

同理我們寫個檔案來測試一下

<?phpfwrite(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"將錯誤輸出定向到標準輸出,與標準輸出合并。

我們測試一下

<?phpfwrite(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的Smarty較為完整的筆記

php的命名空間和自動載入

php的下載功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.