1. 程式人生 > >php在cli模式下STDOUT、STDIN、$argv、$argc的用法

php在cli模式下STDOUT、STDIN、$argv、$argc的用法

php在cli模式下STDOUT和STDIN變數的用法可以用如下程式碼來解釋:

<?php
//提示使用者輸入姓名
fwrite(STDOUT, "what's your name");
 
//獲取使用者輸入資料
$name = trim(fgets(STDIN));
 
//在客戶端輸出
fwrite(STDOUT, "Hello,$name");

在命令列下執行結果:


在命令列模式下還有兩個變數$argc和$argv,一個是$argv變數,它通過命令列把傳遞給PHP指令碼的引數儲存為單獨的陣列元素;另一個是$argc變數,它用來儲存$argv數組裡元素的個數。

測試程式碼如下:


<?php
    print_r($argv);
?>


在命令列下執行結果:


注意,php會將檔名作為陣列的第一個值。

<?php
    print_r($argc);
?>


在命令列下執行結果:

在codeigniter框架中判定php的執行模式是否是cli模式的程式碼如下:


if ( ! function_exists('is_cli'))
{
	/**
	 * Is CLI?
	 *
	 * Test to see if a request was made from the command line.
	 *
	 * @return 	bool
	 */
	function is_cli()
	{
		return (PHP_SAPI === 'cli' OR defined('STDIN'));
	}
}

以cli模式執行ci框架的一個例子:
首先建立一個簡單的控制器。使用你的文字編輯器,建立一個叫做 tools.php 的檔案,並且輸入如下程式碼:

<?php
class Tools extends CI_Controller {
 
  public function message($to = 'World')
  {
    echo "Hello {$to}!".PHP_EOL;
  }
}
?>


然後將這個檔案儲存到你的 application/controllers/ 資料夾裡。

現在正常情況下你可以通過你網站的 URL 來訪問它:

example.com/index.php/tools/message/to

除此之外,我們也可以在 Mac/Linux 中開啟終端,或者在 Windows 下進入“執行”輸入“cmd”,並進入我們的 CodeIgniter 專案的目錄。

$ cd /path/to/project;
$ php index.php tools message


如果你跟著一步步下來,你應該會看到 Hello World!。

$ php index.php tools message "John Smith"


這裡我們像使用 URL 引數一樣給它傳遞了一個引數。“John Smith”作為一個引數被傳遞了,並且輸出也變成:Hello John Smith!。

很好奇是怎麼實現的,以後研究完了ci的原始碼再做補充。