在 PHP 中執行 Shell 指令碼並開啟 Shell 檔案

Sarwan Soomro 2023年1月30日
  1. 使用 shell_exec() 在文字模式下執行 Shell 檔案
  2. 在 CLI 中使用 shell_exec() 返回二進位制格式
在 PHP 中執行 Shell 指令碼並開啟 Shell 檔案

PHP 允許我們使用 shell_exec(); 處理 shell 檔案的函式。然而,如果你的作業系統是 Windows,你應該考慮使用 popen()pclose() 函式,因為管道是在文字模式下執行的,這通常會阻止它的二進位制輸出。

我們將在我們的 shell.php 檔案中實現兩個指令碼。首先,我們將使用 shell_exec(); 開啟 .sh 檔案功能。

然後,我們將使用 shell_exec() 開啟 cmd 介面並執行一些 windows 命令。

使用 shell_exec() 在文字模式下執行 Shell 檔案

函式語法和引數:shell_exec(string $cmd);。此函式以字串格式返回 shell 輸出。

我們在本教程中建立了一個演示 demo.sh 檔案。

程式碼(demo.sh):

#!/bin/sh
echo "Hello world";
echo "This is a shell .sh file for demo";
// your shell commands go here

你可以使用任何文字編輯器建立一個 .sh 檔案並使用 .sh 副檔名儲存它。之後,請執行以下 PHP 指令碼(shell.php)在記事本中開啟它,因為它會在文字模式下丟擲字串格式。

<!DOCTYPE html>
<head>
  <title>
    Run Shell File in PHP and open CLI (shell) to run shell scripts 
     </title>
</head>
</head>
   <form action="shell.php" method ="post" align="center">
      <input type="submit" value="Open .sh file using shell_exec() in PHP" name="openshellfile" />
      <input type="submit" value="Run cmd/shell on Windows using shell_exec() in PHP" name="opencmd" />

   </form>
    </body>
        </html>
<?php
// When user submits the form 
if(isset($_POST['openshellfile'])){
echo $res=shell_exec('PATH to the file/demo.sh');
}
?>

輸出:

用 php 開啟 shell 檔案

在 CLI 中使用 shell_exec() 返回二進位制格式

shell_exec() 函式可用於多種功能。我們的方法是使用 shell_exec() 的絕佳方式,無需在後臺執行函式。

你也不需要使用 popen()pclose()

<?php
// Ping facebook cmd (shell)
// open cmd shell
if (isset($_POST['opencmd']))
{
    //You do not need to use popen() or pclose() either to run this shell command
    // you can add any command here, it will work!
    //For example, you can control your Windows (CLI)
    //You will only change the command after cmd.ex /k "Your Command"
    $open = shell_exec('start cmd.exe /k ping "facebook.com"');
    echo $open;
    //function shell($open) {
    //check your php version
}
?>

雖然我們可以使用我們的指令碼執行任何命令,但我們只 ping 了 facebook.com。例如,如果你想通過此功能開啟一個計算器,請輸入 calc 而不是 ping "facebook.com"

在你的 PHP 指令碼中新增上述程式碼之前,你首先需要更改 HTML 中輸入欄位的名稱。然後將上面的程式碼新增到我們之前執行的 shell.php 檔案中。

命令的範圍可以是任何東西,你可以鍵入任何 windows 命令並將其分配給 $open 變數。該指令碼會將你的命令直接執行到 Windows shell(本示例中為 CLI)。

輸出:

用 php 執行 cmd 命令

我們使用 shell_exec(); 執行了一個 cmd 命令來 ping facebook.com 在上面的程式碼中。但是,你可以在函式引數中鍵入任何命令,它將起作用。

作者: Sarwan Soomro
Sarwan Soomro avatar Sarwan Soomro avatar

Sarwan Soomro is a freelance software engineer and an expert technical writer who loves writing and coding. He has 5 years of web development and 3 years of professional writing experience, and an MSs in computer science. In addition, he has numerous professional qualifications in the cloud, database, desktop, and online technologies. And has developed multi-technology programming guides for beginners and published many tech articles.

LinkedIn