前言
- 有些php版本會禁用一些函數,在使用前請先將其解除禁用
- 解除禁用方法
- 找到你的php.ini,然后搜索disable_functions,將里面的禁用函數刪除即可
> 參數解讀
> $command是要執行的命令
> $output是獲得執行命令中的每一個輸出值
> $return是獲取執行命令后是否執行成功
## 1、system
```php
system($command,$return)
```
> 執行 系統命令/php自定義命令,并將相應的執行結果輸出,同步進程,執行完后進行后續代碼執行
## 2、exec
```php
exec($command,$outpub,$return)
```
> 注意:exec輸出的是命令執行結果的最后一行內容。如果你需要獲取未經處理的全部輸出數據,請使用passthru()函數。
>
## 3、passthru
```php
passthru($command,$return_var)
```
## 4、 shell_exec
```php
shell_exec($command)
```
## 4.1 反引號 `
```php
echo `command`
```
> 反引號和shell_exec意思相同
> 在php中稱之為執行運算符,PHP 將嘗試將反引號中的內容作為 shell 命令來執行,并將其輸出信息返回
以上方法是命令執行完才可執行后面程序,如果你的邏輯復雜,會影響用戶體驗,這時可以提供一個,異步執行的方法,通知服務器執行,不占用主程序進程的方法
## 5、popen pclose
```php
$storm=popen($command,'w');//打開一個進程通道
pclose($storm);
```
> popen中的 w參數可以有 r/w ,r為讀文件 w為謝文件
> pclose要關閉他的返回值,不能直接關閉popen,如果寫在一起會導致同步執行進程,可能造成程序卡死
下面兩類不太常用可以看下,但是在一些特殊情況還是有更好的處理
## 6、proc_open
```php
proc_open (string $cmd ,array $descriptorspec ,array &$pipes [, string $cwd [, array $env [, array $other_options ]]])
```
> 與popen函數類似,但是可以提供雙向管道
[popen函數具體解析](https://www.php.net/manual/zh/function.proc-open.php)
## 7、pcntl_exec
```php
void pcntl_exec ( string $path [, array $args [, array $envs ]] )
```
> path是可執行二進制文件路徑或一個在文件第一行指定了 一個可執行文件路徑標頭的腳本
args是一個要傳遞給程序的參數的字符串數組。
pcntl是linux下的一個擴展,需要額外安裝,可以支持 php 的多線程操作。
pcntl_exec函數的作用是在當前進程空間執行指定程序,版本要求:PHP > 4.2.0
[pcntl函數具體解析](https://www.php.net/manual/zh/function.pcntl-exec.php)