PHP 不僅是 Web 語言,更是強大的命令行腳本語言。本文系統講解 CLI 執行方式、標準輸入輸出 (STDIN/STDOUT/STDERR)、參數解析 ($argc/$argv)、交互式輸入與實戰模板。
<?php
// hello.php
echo "Hello from the CLI";
?>
執行:
php hello.php
# 輸出: Hello from the CLI
三個預定義常量對應文件描述符 0/1/2:
STDIN:標準輸入 (讀取用戶輸入、管道數據)STDOUT:標準輸出 (正常結果、echo 默認寫入此處)STDERR:標準錯誤 (錯誤信息、調試日志,可單獨重定向)<?php
// ask.php
fwrite(STDOUT, "Enter your name: ");
$name = trim(fgets(STDIN));
fwrite(STDOUT, "Hello, $name!\n");
?>
$ php ask.php
Enter your name: Joe
Hello, Joe!
echo "test data" | php -r 'echo strtoupper(fgets(STDIN));'
// 輸出: TEST DATA
$argc:參數總數 (包含腳本名)$argv:參數數組,$argv[0] 為腳本路徑<?php
// args.php
print_r($argv);
?>
$ php args.php chocolate 276 "killer tie, dude!"
Array
(
[0] => args.php
[1] => chocolate
[2] => 276
[3] => killer tie, dude!
)
<?php
// book.php
if ($argc !== 4) {
fwrite(STDERR, "Usage: php book.php \n");
exit(1);
}
array_shift($argv); // 移除腳本名
[$checkin, $nights, $type] = $argv;
echo "You have requested a $type room for $nights nights, checking in on $checkin. Thank you!\n";
?>
$ php book.php 21/05/2005 7 single
You have requested a single room for 7 nights, checking in on 21/05/2005. Thank you!
<?php
// options.php
$options = getopt("hf:v::", ["help", "file:", "version::"]);
print_r($options);
?>
$ php options.php -f test.txt --version=1.0
Array
(
[f] => test.txt
[version] => 1.0
)
#!/usr/bin/env php,賦予執行權限 chmod +x script.php,可直接 ./script.php 運行。fwrite(STDERR, "Error: ...\n");,便於 2>/dev/null 屏蔽。exit(0),失敗 exit(1) 等,配合 Shell 腳本判斷。max_execution_time=0,長任務無需 set_time_limit()。ini_set('memory_limit', '512M'); 處理大數據。require __DIR__.'/vendor/autoload.php'; 引入依賴。PHP CLI 是構建後台任務、數據遷移、定時腳本、微服務的利器,善用之事半功倍。