相信大家或多或少都用過AMH,Vestacp等vps面板,這些面板都是使用的php語言,從本質(zhì)上來說就是php執(zhí)行l(wèi)inux的外部命令。
PHP 為執(zhí)行外部命令提供大量函數(shù),其中包括 shell_exec()、exec()、passthru() 和 system()。這些命令是相似的,但為您運行的外部程序提供不同的界面。所有這些命令都衍生一個子進程,用于運行您指定的命令或腳本,并且每個子進程會在命令輸出寫到標(biāo)準輸出 (stdout) 時捕捉它們。
shell_exec函數(shù)
說明:通過 shell 運行外部程序,然后以字符串的形式返回結(jié)果。
語法:string shell_exec ( string $cmd )
返回值: 字符串
詳細介紹
shell_exec() 命令行實際上僅是反撇號 (`) 操作符的變體,通過該命令可以運行shell命令,然后以字符串的形式返回結(jié)果。
示例代碼
統(tǒng)計當(dāng)前目錄下所有文件中的單詞數(shù)量,并輸出前五行。
- $results = shell_exec('wc -w *.txt | head -5');
- echo "
".$results . "- “;
- ?>
exec函數(shù)
說明:與 shell_exec() 相似,返回輸出的最后一行
語法:string exec ( string $command [, array &$output [, int &$return_var ]] )
返回值: 字符串
詳細介紹:
本函數(shù)執(zhí)行輸入 command 的外部程序或外部指令。它的返回字符串只是外部程序執(zhí)行后返回的最后一行;若是 return_var 跟 output 二個參數(shù)都存在,則執(zhí)行 command 之后的狀態(tài)會填入 return_var 中。
實例代碼:
統(tǒng)計當(dāng)前目錄下所有文件中的單詞數(shù)量,并輸出前五行,但是實際上只輸出了一行。
- $results = exec('wc -w *.txt | head -5');
- echo $results;
- #只會輸出一行:
- #3847 myfile.txt
- ?>
passthru()
說明:passthru() 允許您運行外部程序,并在屏幕上顯示結(jié)果。
語法:void passthru ( string $command [, int &$return_var ] )
返回值: 整數(shù)
詳細介紹:
passthru() 允許您運行外部程序,并在屏幕上顯示結(jié)果。您不需要使用 echo 或 return 來查看結(jié)果;它們會顯示在瀏覽器上。您可以添加可選的參數(shù),即保存從外部程序返回的代碼的變量,比如表示成功的 0,這為調(diào)試提供更好的機制。
實例代碼:
- passthru('wc -w *.txt | head -5',$returnval);
- echo "
".$returnval;- ?>
system函數(shù)
說明:執(zhí)行外部程序并顯示輸出資料。
語法:string system ( string $command [, int &$return_var ] )
返回值: 字符串
詳細介紹
system() 命令是一種混合體。它像 passthru() 一樣直接輸出從外部程序接收到的任何東西。它還像 exec() 一樣返回最后一行,并使返回代碼可用。
示例代碼
- system('wc -w *.txt | head -5');
- #輸出如下:
- #123 file1.txt 332 file2.txt 444 file3.txt
- #and so on
- ?>
小結(jié):
一般來說,exec() 命令比較常用;
如果不關(guān)心結(jié)果,并且命令比較簡單時,可以使用 shell_exec();
如果僅需返回一個 shell 腳本,可以使用 passthru()。
不過小編還是要說一句,沒有必須使用php執(zhí)行系統(tǒng)函數(shù)了,我們可以禁止掉了,在php.ini中我們?nèi)缦聦?
disable_functions = proc_open,exec,passthru,shell_exec,system,popen
新聞熱點
疑難解答