在命令列執行 PHP 腳本時,無法使用 $_GET/$_POST,必須採用 CLI 專屬的參數機制。本文詳細說明為何需要 CLI、如何正確傳遞與接收參數,並對比 Shell 腳本異同。
$ php test.php?aaa=bbb Could not open input file: test.php?aaa=bbb
CLI 模式不經過 Web Server,無 HTTP 協議,查詢字符串會被視為文件名一部分導致錯誤。
測試腳本 test.php:
<?php print_r($argv); echo "\n"; echo $argc; echo "\n";
執行:
$ php test.php aaa ccc bbbb
Array
(
[0] => test.php
[1] => aaa
[2] => ccc
[3] => bbbb
)
4
$argv[0] 永遠是腳本文件名$argv[1..n] 為用戶傳入參數$argc 為參數總個數(含腳本名)| 特性 | PHP CLI | Shell Script |
|---|---|---|
| 參數存取 | 陣列 $argv | 位置變數 $0 $1 $2... |
| 參數個數 | $argc | $# |
| 類型安全 | 字符串,需自行轉型 | 字符串 |
php test.php "hello world"getopt() 或 Symfony Console 組件php "C:\My Scripts\test.php" arg1掌握 CLI 參數機制,是編寫健壯定時任務、守護進程、部署腳本的基礎。