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

PHP 命令列腳本開發指南:從安裝到參數處理實戰

     編輯:PHP 綜合知識

PHP 不僅是 Web 開發利器,通過編譯 CLI SAPI(命令列介面),亦可成為強大的系統管理、任務調度、數據處理腳本語言。本文詳述 PHP CLI 環境構建、Shebang 機制、參數解析與進階用法,助你拓展 PHP 應用邊界。

一、構建 PHP CLI 可執行檔

  1. 獲取源碼:wget https://www.php.net/distributions/php-8.3.x.tar.gz(選擇對應版本)
  2. 解壓進入:tar -xzf php-*.tar.gz && cd php-*
  3. 配置編譯(僅 CLI,無 Web 模組):
    ./configure --disable-all --enable-cli --with-config-file-path=/etc/php/cli
  4. 編譯安裝:make && sudo make install
  5. 精簡體積(可選):strip /usr/local/bin/php 移除調試符號,體積減少 30%+。
  6. 驗證:php -v 輸出版本資訊即成功。

二、第一支 CLI 腳本:Hello World

#!/usr/local/bin/php -q
<?php
echo "Hello, World!\n";
?>

關鍵點:

  • #!/usr/local/bin/php -q:Shebang 行指定解析器路徑,-q 抑制 HTTP Header 輸出(CGI 模式預設行為)。
  • 無需 <?php ... ?> 閉合標籤,純 PHP 文件建議省略結尾標籤防止輸出空白。
  • 賦予執行權限:chmod +x hello.php,直接 ./hello.php 運行。

三、命令列參數處理:$argc 與 $argv

PHP CLI 自動提供兩個超全局變量:

  • $argc:參數總數(含腳本名,最小為 1)
  • $argv:參數陣列,$argv[0] 為腳本路徑,$argv[1] 起為實際參數

範例 1:固定兩參數求和

#!/usr/local/bin/php -q
<?php
if ($argc !== 3) {
    fwrite(STDERR, "Usage: {$argv[0]}  \n");
    exit(1);
}
$sum = $argv[1] + $argv[2];
echo $sum . "\n";
?>

執行:./sum.php 10 20 → 輸出 30

範例 2:動態參數累加

#!/usr/local/bin/php -q
<?php
$sum = 0;
for ($i = 1; $i < $argc; $i++) {
    $sum += $argv[$i];
}
echo $sum . "\n";
?>

執行:./bigsum.php 1 2 3 4 5 → 15;./bigsum.php 1 2 3 4 5 6 → 21

四、進階實戰技巧

1. 標準輸入/輸出/錯誤流

<?php
// 讀取管道輸入
$stdin = fopen('php://stdin', 'r');
while (($line = fgets($stdin)) !== false) {
    echo strtoupper($line);
}
fclose($stdin);

// 區分輸出流
fwrite(STDOUT, "正常輸出\n");
fwrite(STDERR, "錯誤訊息\n");

2. 獲取環境變數

$env = getenv('APP_ENV') ?: 'production';
$dbHost = $_ENV['DB_HOST'] ?? 'localhost';

3. 交互式選單與彩色輸出

<?php
$colors = ['red'=>31, 'green'=>32, 'yellow'=>33, 'blue'=>34];
function colorize($text, $color) {
    global $colors;
    return "\033[{$colors[$color]}m$text\033[0m";
}
echo colorize("成功!", 'green') . "\n";

4. 守護進程與信號處理

<?php
declare(ticks=1);
pcntl_signal(SIGTERM, function() { echo "收到終止信號,優雅退出\n"; exit(0); });
while (true) {
    // 任務邏輯
    sleep(5);
}

五、部署與運維建議

  • 專用 php.ini:php -c /etc/php/cli/php.ini script.php 隔離 Web 與 CLI 配置(如 memory_limit=-1、max_execution_time=0)。
  • Composer 自動載入:require __DIR__.'/vendor/autoload.php'; 復用框架組件(Symfony Console、Laravel Zero 等)。
  • Systemd 服務化:編寫 /etc/systemd/system/php-worker.service 管理長期運行腳本。
  • 日誌輪轉:配合 logrotate 處理腳本輸出日誌。

結語

PHP CLI 打破了「只能寫網頁」的刻板印象,配合豐富的擴展生態(pcntl、posix、ffi、swoole),完全勝任運維自動化、數據管道、微服務側車等場景。下次需要寫 Bash/Python 腳本時,不妨嘗試 PHP——你可能會愛上它的類型系統與生態一致性。

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