2007年8月9日

PHP的STDIN(標準輸入)、STDOUT(標準輸出)及STDERR(標準錯誤輸出)

有管理過Unix like的作業系統或是有在撰寫Unix like程式的人往往會使用到標準輸入(STDIN)、輸出(STDOUT)及錯誤輸出(STDERR)的管線來完成一些訊息的輸入、輸出及錯誤訊息的表達。
但是若要用php來完成同樣的事情時,則未免有些遺憾,沒有現成的系統錯誤輸出及系統輸入函數(像是scanf)可以使用,但是可以利用一些簡單的fopen()、fprintf()及fscanf()的檔案I/O函數來組合成類似的功能。以下為簡單的程式範例:

1).使用fopen()及fscanf()的函數組合出類似scanf()的功能:
<?
/* 判斷STDIN是否已經預先被定義了 */
if(!defined("STDIN")) {
define("STDIN", fopen('php://stdin','r'));
}

/* 透過標準格式化輸出函數將字串印出 */
printf("Please Input some thing:\n");

/* 利用fscanf()的函數來讀取預先定義好的STDIN,並將其直傳入$input的變數中 */
fscanf(STDIN, "%s", $input);

/* 透過標準格式化輸出函數將$input變數的值印出 */
printf("Your input data is \"%s\"\n", $input);
?>

---------------------------------------------------------------------------
2).使用fopen()及fprintf()的函數將訊息列印到標準錯誤輸出:
<?
/* 判斷STDERR是否已經預先被定義了 */
if(!defined("STDERR")) {
define("STDERR", fopen('php://stderr','w'));
}

/* 透過標準格式化輸出函數將字串印出 */
printf("Standard Message Output\n");

/* 利用fprintf()的函數將訊息寫入預先定義好的STDERR */
fprintf(STDERR, "Standard Error Message Output\n");
?>

續待.....

1 則留言:

Unknown 提到...

老劉~~是你ㄝ!!正在找PHP stdin方案,搜到這篇囉~哈哈!!

精選文章

Ubuntu 20.04 LTS VM syslog 出現 multipathd 錯誤時的處置措施

在 VM 上安裝完 Ubuntu 20.04 LTS 版本後在一次例行性檢查中發現 syslog 中發現一直跳出 multipathd 的錯誤,如下圖 這問題產生的原因是 ESXi 不會產生 udev 必要的資訊,所以 udev 就無法產生出相對應的 /dev/disk/by-i...