PHP 不僅是 Web 伺服器端語言,更是強大的命令列腳本工具。本文系統介紹 CLI 模式的核心用法,助你建立自動化腳本、排程任務、維護工具。
| 指令 | 功能 | 輸出範例 |
|---|---|---|
php -v | 顯示版本與編譯資訊 | PHP 8.2.10 (cli) ... Zend Engine v4.2.10 |
php -m | 列出已載入擴展模組 | [Core, date, pdo, json, ...] |
php -i | 輸出 phpinfo()(純文字) | 完整設定資訊 |
php --ini | 顯示載入的 .ini 檔案路徑 | Configuration File => /etc/php/8.2/cli/php.ini |
# hello.php <?php echo "Hello CLI\n"; ?> php -f hello.php # 或直接 php hello.php
php -a # 進入互動模式,逐行執行 php > echo 1+1; 2 php > exit
php -r 'for($i=0;$i<3;$i++) echo "Number: $i\n";' # 輸出: # Number: 0 # Number: 1 # Number: 2
$_GET、$_POST、$_SESSION、$_SERVER['HTTP_*'] 皆不可用。STDIN、寫入 STDOUT/STDERR。max_execution_time = 0。__DIR__ 或 chdir())。<?php
// args.php
echo "腳本名稱: \$argv[0] = {$argv[0]}\n";
echo "參數總數: \$argc = $argc\n";
for ($i = 1; $i < $argc; $i++) {
echo "參數 $i: {$argv[$i]}\n";
}
?>
php args.php foo bar baz # 輸出: # 腳本名稱: $argv[0] = args.php # 參數總數: $argc = 4 # 參數 1: foo # 參數 2: bar # 參數 3: baz
<?php
$options = getopt('hf:v', ['help', 'file:', 'version']);
if (isset($options['h']) || isset($options['help'])) {
echo "Usage: php script.php -f [--version]\n";
exit;
}
if (isset($options['f']) || isset($options['file'])) {
$file = $options['f'] ?? $options['file'];
echo "處理檔案: $file\n";
}
?>
| 指令 | 用途 |
|---|---|
php -l file.php | 僅檢查語法,不執行 |
php -s file.php | 輸出 HTML 高亮原始碼 |
php --rf function_name # 函數定義 php --rc class_name # 類別定義 php --re extension_name # 擴展資訊 php --rz zend_extension # Zend 擴展資訊
<?php
// backup.php
require_once __DIR__ . '/config.php';
$date = date('Ymd_His');
$file = "/backups/db_{$date}.sql.gz";
$cmd = "mysqldump -u{$db_user} -p{$db_pass} {$db_name} | gzip > {$file}";
exec($cmd, $output, $return_var);
if ($return_var === 0) {
error_log("備份成功: $file");
} else {
error_log("備份失敗: " . implode("\n", $output));
}
?>
# 每天凌晨 2:30 執行 30 2 * * * /usr/bin/php /var/www/scripts/backup.php >> /var/log/backup.log 2>&1
php -f script.php 無反應或報錯?php -v 確認 CLI 可用;再用 php -l script.php 檢查語法。php --ini 顯示的 cli php.ini,確認 extension=pdo_mysql 已啟用。include 找不到檔案?require_once __DIR__ . '/../config.php'; 或設定 include_path。chcp 65001 切換至 UTF-8 代碼頁,或在腳本開頭 ini_set('default_charset', 'UTF-8');。掌握 PHP CLI 能力,讓你脫離瀏覽器限制,建立高效能的後台服務、資料處理管線、基礎設施自動化工具。善用 php -l 靜態檢查、getopt() 參數解析、標準輸出/錯誤流導向,是撰寫專業級 CLI 應用的關鍵。