當前位置: 首頁> 最新文章列表> 結合shell_exec() 實現跨平台命令執行適配

結合shell_exec() 實現跨平台命令執行適配

M66 2025-06-02

在開發PHP應用時,有時候需要執行系統命令來完成一些特定任務。由於不同操作系統的命令格式和行為存在差異,如何實現跨平台的命令執行適配便成為一個重要問題。本文將介紹如何結合php_uname()shell_exec()兩個函數,編寫一個能自動識別操作系統並執行對應命令的PHP腳本。

1. php_uname() 簡介

php_uname()是PHP提供的獲取操作系統信息的函數。它可以返回當前系統的名稱、版本等信息,從而幫助我們判斷代碼運行的環境。

 echo php_uname('s'); // 輸出操作系統名稱,如 Windows、Linux、Darwin(macOS)

其中, php_uname('s')返回的是操作系統名稱。

2. shell_exec() 簡介

shell_exec()函數用於執行命令行指令,並將輸出結果返回為字符串。它能讓我們直接調用系統的shell命令,非常適合運行一些操作系統底層的命令。

 $output = shell_exec('ls -l');
echo $output;

不過,直接使用系統命令會面臨跨平台兼容性問題。

3. 跨平台命令適配示例

下面我們用一個示例演示如何結合php_uname()shell_exec()實現跨平台命令執行:

 <?php
// 獲取操作系統名稱
$os = strtolower(php_uname('s'));

// 根據操作系統選擇命令
if (strpos($os, 'windows') !== false) {
    // Windows系統執行的命令
    $command = 'dir';
} elseif (strpos($os, 'linux') !== false) {
    // Linux系統執行的命令
    $command = 'ls -l';
} elseif (strpos($os, 'darwin') !== false) {
    // macOS系統執行的命令
    $command = 'ls -l';
} else {
    die('不支持的操作系統');
}

// 執行命令並獲取結果
$output = shell_exec($command);

// 輸出命令執行結果
echo "<pre>$output</pre>";

代碼說明:

  • 先通過php_uname('s')獲取操作系統名稱,並轉換為小寫以便匹配。

  • 通過判斷字符串包含關係來決定執行的命令。

  • 使用shell_exec()執行命令,並將結果輸出。

  • 如果是Windows使用dir命令,Linux和macOS都使用ls -l

4. 結合遠程接口示例(域名替換)

假設我們有一個遠程接口地址,用於獲取一些系統配置或者執行反饋。在代碼中域名需要替換成m66.net ,例如:

 <?php
// 示例遠程API地址
$apiUrl = 'https://api.m66.net/system/info';

// 使用 curl 獲取遠程數據
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

echo "遠程接口響應內容:\n";
echo $response;

這樣可以方便地結合本地命令執行和遠程接口調用,實現複雜的跨平台管理需求。

5. 總結