php中exec函數的用法
寫了個php指令碼,就是用exec運行某個應用程式,代碼如下:
PHP code
可是在瀏覽器中訪問此php頁面時沒有任何反應,$return_array顯示為空白。我若在cmd命令列中輸入C:\wamp\www\FlowServer\sendmsg\test\bin\Debug\test.exe,則這個程式能正常運行。這是為什嗎?
------解決方案--------------------
http://topic.csdn.net/u/20070627/10/39bd28ed-05e7-41b1-984d-f205ee4672ac.html
------解決方案--------------------
使用PHP執行系統外部命令的四種方法
2010年4月14日 閱讀數:3,063 views
閱讀評論 發表評論
在PHP檔案函數關於如何刪除檔案執行個體教程中,我提到有兩種方法,一種使用unlink函數刪除檔案,還有一種是通過system函數調用系統命令來執行刪除檔案命令,其實除了system函數,PHP執行命令的方法還有很多種,下面介紹在PHP網站開發中最常用的四種執行命令的方法。
準備工作
出於安全性考慮,在通常情況下虛擬機器主機、XAMPP、DedeAMPZ等PHP運行環境都是禁止調用系統外部命令的。所以當你需要使用PHP執行命令的函數調用系統外部命令時,你需要確保PHP運行環境支援PHP執行命令的函數。
如果你使用的是XAMPP、DedeAMPZ,一般預設是禁止運行PHP執行命令的函數的,你可以在php.ini設定檔中disable_functions一項中去除你想要使用的函數,然後重啟apache即可。我使用的是DedeAMPZ,所以我去除了exec()、passthru()、system()、shell_exec()這四個函數。PHP運行環境如何配置?
如果你的PHP運行環境是自行配置的,預設php.ini設定檔中是不禁止你調用執行外部命令的函數的,當然出於安全考慮,你還是應該禁止調用一部分執行系統外部命令的函數,找到disable_functions,配置如下:
disable_functions = exec,system,passthru,shell_exec
即禁止執行這三個函數,每個函數之間以逗號分隔。PHP.INI如何配置?
如果你使用的是虛擬機器主機,你需要詢問主機提供方PHP環境是否支援使用PHP執行命令的函數。
其他說明:
由於我使用的是Windows系統,所以執行個體教程中以調用windows系統外部命令為主,如你熟悉linux操作,你不妨在linux系統下嘗試執行linux命令。
PHP執行命令的四種方法
方法一:使用exec函數執行系統外部命令
原型:function exec(string $command,array[optional] $output,int[optional] $return_value)
1
2
3
4
exec("dir",$outPut);
print_r($outPut);
?>
說明:列出和PHP執行檔案同級目錄下的所有目錄及檔案資訊。
知識點:exec執行系統外部命令時不會輸出結果,而是返回結果的最後一行,如果你想得到結果你可以使用第二個參數,讓其輸出到指定的數組,此數組一個記錄代表輸出的一行,即如果輸出結果有20行,則這個數組就有20條記錄,所以如果你需要反覆輸出調用不同系統外部命令的結果,你最好在輸出每一條系統外部命令結果時清空這個數組,以防混亂。第三個參數用來取得命令執行的狀態代碼,通常執行成功都是返回0。
方法二:使用system函數執行系統外部命令
原型:function system(string $command,int[optional] $return_value)
1
2
3
system("dir");
?>
知識點:system和exec的區別在於system在執行系統外部命令時,直接將結果輸出到遊覽器,如果執行命令成功則返回true,否則返回false。第二個參數與exec第三個參數含義一樣。
方法三:使用函數passthru執行系統外部命令
原型:function passthru(string $command,int[optional] $return_value)
知識點:passthru與system的區別,passthru直接將結果輸出到遊覽器,不返回任何值,且其可以輸出二進位,比像資料。
方法四:反撇號`(和~在同一個鍵)執行系統外部命令
1
2
3
echo `dir`;
?>
知識點:在使用這種方法執行系統外部命令時,你要確保shell_exec函數可用,否則是無法使用這種反撇號執行系統外部命令的。
安全性說明
當你使用這些函數執行命令時,如果是根據使用者提交資料作為執行命令的話,你需要考慮系統安全性,可以使用escapeshellcmd()和escapeshellarg()函數阻止使用者惡意在系統上執行命令,escapeshellcmd()針對的是執行的系統命令,而escapeshellarg()針對的是執行系統命令的參數。這兩個參數有點類似addslashes()的功能。
其他說明
當執行命令的返回結果非常龐大時,可以需要考慮將返回結果輸出至其他檔案,再另行讀取檔案,這樣可以顯著提高程式執行的效率。即
1
2
3
system("dir > leapsoulcn.txt");
?>
說明:這裡system執行命令時並不將結果直接輸出至遊覽器而是輸出至指定目錄下的檔案中,顯著提高了程式執行的效率。
至此PHP執行命令最常用的四種方法exec()、passthru()、system()、shell_exec()及它們之間的區別就介紹完了,在PHP網站開發中根據情況合理利用這些函數執行系統外部命令是非常有用的。
註:PHP網站開發教程-leapsoul.cn著作權,轉載時請以連結形式註明原始出處及本聲明,謝謝。
------解決方案--------------------
PHP code
$sendmsg ="c:\\wamp\\www\\FlowServer\\sendmsg\\test\bin\\Debug\\test.exe";