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

PHP 命令列模式(CLI)入門實戰:腳本執行、參數處理、定時任務與除錯技巧

     編輯:PHP 相關知識

前言

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

二、執行 PHP 檔案與程式碼

1. 執行檔案

# hello.php
<?php echo "Hello CLI\n"; ?>

php -f hello.php
# 或直接
php hello.php

2. 互動模式(Interactive Shell)

php -a
# 進入互動模式,逐行執行
php > echo 1+1;
2
php > exit

3. 直接執行程式碼片段

php -r 'for($i=0;$i<3;$i++) echo "Number: $i\n";'
# 輸出:
# Number: 0
# Number: 1
# Number: 2

三、CLI 專用特性與限制

  • 無 Web 變數: $_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

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

<?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 擴展資訊

七、實戰:建立系統排程任務

1. 腳本範例:每日備份資料庫

<?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. Crontab 設定

# 每天凌晨 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 檢查語法。
無法載入擴展(如 pdo_mysql)?
檢查 php --ini 顯示的 cli php.ini,確認 extension=pdo_mysql 已啟用。
腳本中 include 找不到檔案?
使用絕對路徑 require_once __DIR__ . '/../config.php'; 或設定 include_path。
Windows 下中文亂碼?
執行 chcp 65001 切換至 UTF-8 代碼頁,或在腳本開頭 ini_set('default_charset', 'UTF-8');。

結語

掌握 PHP CLI 能力,讓你脫離瀏覽器限制,建立高效能的後台服務、資料處理管線、基礎設施自動化工具。善用 php -l 靜態檢查、getopt() 參數解析、標準輸出/錯誤流導向,是撰寫專業級 CLI 應用的關鍵。

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