在 CLI 模式下執行 PHP 腳本時,無法使用 `$_GET`/`$_POST` 等超全域變數接收參數。正確做法是透過 $argv 陣列與 $argc 變數取得命令列引數。本文詳細說明參數傳遞機制、常見錯誤與實戰範例。

# 錯誤:嘗試用 URL 查詢字串方式傳參
php /path/script.php?lang=en
# 輸出:Could not open input file: /path/script.php?lang=en
CLI 模式不經過 Web Server,無 HTTP 協定,故查詢字串無效。
$argv:包含所有引數的陣列,$argv[0] 為腳本檔名$argc:引數總數 (含檔名)
$ php test.php 111 222 333 444
All param is:
Array
(
[0] => test.php
[1] => 111
[2] => 222
[3] => 333
[4] => 444
)
Total number of parameter is: 5
$ php script.php --lang=zh_TW --env=staging --debug
Language: zh_TW
Environment: staging
Debug: true
| 特性 | PHP CLI | Shell Script |
|---|---|---|
| 參數存取 | $argv 陣列 |
$1, $2... 位置參數 |
| 參數總數 | $argc |
$# |
| 腳本名稱 | $argv[0] |
$0 |
| 具名參數解析 | getopt() |
getopts / 手動解析 |
#!/usr/bin/php 並賦予執行權限 (chmod +x),可直接 ./script.php arg1 arg2 執行。getopt() 處理長/短選項,提升腳本易用性。fwrite(STDERR, "Error msg\n");exit(1); 非零值表示失敗,利於腳本串聯判斷。掌握 $argv/$argc 與 getopt(),即能編寫健壯、可攜的 PHP CLI 工具腳本。
VNC 遠程連線 Linux 桌面完整教學:Server 安裝、配置、密碼、防火牆、Viewer 連線
Linux Shell 多執行緒程式設計:以 FIFO + read 控制並發數的實戰範本
Linux 命令列執行 PHP 檔案並傳遞參數完整教學:$argv/$argc 實戰範例
Linux 新增靜態路由指令詳解:臨時/永久、預設/主機/網路路由完整範例
Ubuntu sudo 執行緩慢?將主機名加入 /etc/hosts 即時解決
Linux 使用 Shell 腳本監控高速網路流量:基於 /sys/class/net 統計介面