在php中,咱們能夠使用exec()
來執行系統命令,但有時咱們會遇到exec()
命令執行不成功,或者無返回的狀況,下面來講明一下:php
exec ( string $command [, array &$output [, int &$return_var ]] ) : string 參數說明: 1.$command 要執行的命令 2.$output 執行結果 3.$return_var 若同時設置 $output 和此變量,命令執行後的返回狀態會被寫入到此變量
exec("ping www.baidu.com", $output);
正常來講執行結果會跟在服務器上直接執行ping
沒區別,可是因爲某些緣由會致使意外狀況,下邊針對兩種狀況做出說明,以及解決辦法linux
問題服務器
當咱們在服務器上直接執行linux系統命令時(此處以ping爲例),執行權限取決於咱們登錄用戶的權限,若是咱們登錄用戶爲root
,則執行ping
的時候是用root來執行。但當咱們在網站上訪問的時候,咱們此時的用戶爲www
,若是不修改ping的執行權限的話,是沒法執行成功的。
解決函數
修改ping或者對應命令的執行權限
問題網站
還有一種狀況,當咱們用exec執行某個命令時,不報錯,也不返回結果,緣由是此命令沒有在環境變量配置的目錄下即/etc/profile
文件中,以ifconfig
爲例,咱們能夠用whereis ifconfig
,找出此命令具體路徑,好比路徑在/usr/sbin
下,兩種解決辦法:
解決code
1 複製命令到/usr/bin
下,也就是環境變量下的目錄(不太推薦)
2 直接將命令全路徑補全exec('/usr/sbin',$output);
(推薦)
3 在環境變量中增長目標目錄例如增長/usr/sbin
到目錄