首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 命令行 (CLI) 完整指南:參數接收、標準輸入輸出與腳本實戰

     編輯:PHP 綜合知識

掌握 PHP CLI:從 Hello World 到生產級命令行工具開發

PHP 不僅是 Web 語言,更是強大的命令行腳本語言。本文系統講解 CLI 執行方式、標準輸入輸出 (STDIN/STDOUT/STDERR)、參數解析 ($argc/$argv)、交互式輸入與實戰模板。

一、基礎執行

<?php
// hello.php
echo "Hello from the CLI";
?>

執行:

php hello.php
# 輸出: Hello from the CLI

二、標準輸入輸出 (STDIN/STDOUT/STDERR)

三個預定義常量對應文件描述符 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

  • $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!

五、進階:getopt() 解析短/長選項

<?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
)

六、最佳實踐清單

  1. Shebang:文件首行添加 #!/usr/bin/env php,賦予執行權限 chmod +x script.php,可直接 ./script.php 運行。
  2. 錯誤輸出走 STDERR:fwrite(STDERR, "Error: ...\n");,便於 2>/dev/null 屏蔽。
  3. 退出碼:成功 exit(0),失敗 exit(1) 等,配合 Shell 腳本判斷。
  4. 無限執行時間:CLI 默認 max_execution_time=0,長任務無需 set_time_limit()。
  5. 內存限制:ini_set('memory_limit', '512M'); 處理大數據。
  6. Composer 自動加載:require __DIR__.'/vendor/autoload.php'; 引入依賴。
  7. Symfony Console / Laravel Artisan:複雜命令建議使用成熟框架組件,自帶參數驗證、進度條、表格輸出、命令嵌套。

PHP CLI 是構建後台任務、數據遷移、定時腳本、微服務的利器,善用之事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved