PHP exec() 函數(shù)允許在腳本中執(zhí)行 shell 命令。通過它,我們可以調(diào)用一些 Linux/Unix 相關(guān)的命令。例如:
exec('ls -a');
該命令將輸出當(dāng)前目錄下的所有文件和文件夾(包括以 "." 開頭的隱藏文件)。
再例如,我們可以使用 exec() 函數(shù)來調(diào)用一些 Git 操作的 shell 命令:
exec('git pull origin master');
該命令將從 GitHub 倉庫中拉取最新的代碼。
注意:在使用 exec() 函數(shù)之前,一定要確保已開啟了 PHP 的 safe_mode 和 disable_functions 安全選項。
下面,讓我們來看一些更加詳細的例子。
執(zhí)行簡單的命令
我們可以使用 exec() 函數(shù)執(zhí)行一些簡單的 Linux/Unix 命令。
$cmd_output = array(); exec('ls -a', $cmd_output); foreach ($cmd_output as $output) { echo $output . "\n"; }
上面代碼中,我們將 "ls -a" 命令的輸出結(jié)果存儲在 $cmd_output 數(shù)組中,并遍歷該數(shù)組輸出每一行結(jié)果。
執(zhí)行帶參數(shù)的命令
有些命令需要帶有一些參數(shù)才能正常執(zhí)行。例如,我們可以在命令中指定要查詢的目錄:
$cmd_output = array(); exec('ls -a /var/www/html', $cmd_output); foreach ($cmd_output as $output) { echo $output . "\n"; }
上述代碼將輸出 /var/www/html 下的所有文件和目錄。
執(zhí)行危險的命令
有些 Linux/Unix 命令可能會對服務(wù)器造成一定的風(fēng)險。因此,我們要謹慎使用這些命令。例如,我們可以使用 rm 命令刪除文件:
$filepath = '/var/www/html/data.log'; exec("rm $filepath");
上面代碼將刪除 /var/www/html/data.log 文件。
命令并行執(zhí)行
在某些情況下,我們需要同時執(zhí)行多個命令,以便提高腳本的執(zhí)行效率。例如:
$cmd1 = 'ls -a'; $cmd2 = 'pwd'; $cmd_output = array(); $processes = array(); $processes[0] = popen($cmd1, 'r'); $processes[1] = popen($cmd2, 'r'); foreach ($processes as $id =>$process) { while (($line = fgets($process)) !== false) { $cmd_output[$id] = $line; echo $line; } pclose($process); }
上述代碼將同時執(zhí)行 ls -a 和 pwd 命令,并輸出它們的結(jié)果。
總結(jié)
在 PHP 中使用 exec() 函數(shù)可以方便地調(diào)用 Linux/Unix 命令,并獲取命令執(zhí)行的結(jié)果。但是,在使用 exec() 函數(shù)時,一定要謹慎,避免執(zhí)行危險的命令。此外,命令執(zhí)行過程中也容易受到一些安全問題的影響。