Web 開發中常需直接操作服務器文件系統、進程管理、日志分析等任務,純 PHP 函數受限於權限與性能,調用 Shell 命令成為剛需。
| 函數 | 返回值 | 適用場景 | 特點 |
|---|---|---|---|
shell_exec($cmd) | 字符串(完整輸出) | 獲取命令完整輸出 | 反撇號 `cmd` 別名,最常用 |
exec($cmd, &$output, &$return_var) | 最後一行輸出 | 需獲取返回碼、逐行處理輸出 | $output 為數組,$return_var 為退出碼 |
passthru($cmd, &$return_var) | 無(直接輸出到 stdout) | 二進制輸出(圖片、PDF 等) | 無緩衝直接輸出 |
system($cmd, &$return_var) | 最後一行輸出 | 交互式命令、實時輸出 | 同 passthru 但會輸出換行 |
<?php
// 等價於 shell 命令:wc -w *.txt
$results = shell_exec('wc -w *.txt');
echo $results;
// 輸出示例:165 readme.txt 388 results.txt 588 summary.txt

shell_exec('ls -1 | wc -l')shell_exec('wc -l /var/log/nginx/access.log')shell_exec('rsync -avz /src/ user@backup:/dest/')shell_exec('ps aux | grep php')絕不直接拼接用戶輸入到命令中! 必須使用
escapeshellarg()、escapeshellcmd()轉義,或通過白名單驗證參數。防止命令注入攻擊。
PHP 4.2.0+ 內置 CLI SAPI,支持直接編寫 Shell 腳本(#!/usr/bin/php),脫離 Web 服務器獨立運行,適合定時任務、守護進程、構建工具等場景。