星期三, 十二月 27, 2006

用 PHP 寫 Command-Line Script(CLI)

用 PHP 來寫一般 Script 很簡單, 只要直接寫, 再用 PHP 去執行即可, 但是寫 Command-Line Script(CLI - Command-Line Interface) 當然要用用 STDIN, STDOUT, STDERR 囉(用此做做互動)~

詳細文件可見: PHP: Using PHP from the command line - Manual

上述文件的資料算是蠻多的, 有人整理出比較常用的方法, 就如下 Link, 以下的範例大多參考自: Control your scripts with command-line PHP.

再來就依下述五點來寫:

  1. 安裝 PHP CLI
  2. CLI 版 Hello World
  3. 標準輸入 STDIN, 標準輸出 STDOUT, 標準錯誤輸出 STDERR
  4. argv, argc 參數接收
  5. PHP 預設常用參數

1. 安裝 PHP CLI

apt-get install php5-cli (或 php4-cli)

2. CLI 版 Hello World (記得 chmod +x)

#!/usr/bin/php
<?php echo 'Hello World!'; ?>

3. STDIN, STDOUT, STDERR

  • STDIN: The standard input device
  • STDOUT: The standard output device
  • STDERR: The standard error device

範例:

<?php
// 透過 標準輸出 印出要詢問的內容
fwrite(STDOUT, "Enter your name: ");

// 抓取 標準輸入 的 內容
$name = trim(fgets(STDIN));

// 將剛剛輸入的內容, 送到 標準輸出
fwrite(STDOUT, "Hello, $name!");
?>

執行即會如下:

Enter your name: Jon
Hello, Jon!

4. argv, argc 參數接收

  • argv: 參數值, 會存成 array 型態( argv[0, 1....] )
  • argc: 參數總數, 數字(int)型態

範例: arg.php

#!/usr/bin/php
<?php echo print_r($argv); echo 'argc: ' . $argc; ?>

執行結果:

./arg.php chocolate 276 'killer tie, dude!'
Array
(
[0] => b.php
[1] => chocolate
[2] => 276
[3] => killer tie, dude!
)
argc: 4

注意: 轉載文章的此範例有錯誤, 特別是最後一個參數, 要用 單引號"'" 括起來, 不然 "!" 這個會有錯誤產生.

5. PHP 預設常用參數(更多詳細可見 PHP Manual)

  • -a: Run interactively (直譯模式)
  • -c path: Read php.ini file from path
  • -n: Run without reading php.ini
  • -m: 列出現在有載入哪些 Modules
  • -i: Display information about the PHP build
  • -l: 測試看看 Script 是否有錯誤
  • -s: 將 Script 的 Keyword 標出彩色(HTML)
  • -w: Display source code after stripping comments
  • -h: Display help

範例:

php -a (任何命令都直接輸出, 想成類同 python 就是了)
Interactive mode enabled
<?php
echo time();
1167140419
echo 2+2;
4
exit;

即跳出回 shell.

相關標籤
Add this page to del.icio.us Add this page to Yahoo Taiwan's bookmark Add this page to MyShare

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~