PHP中exec()函數執行系統命令失敗

0.說明

在php中,咱們能夠使用exec()來執行系統命令,但有時咱們會遇到exec()命令執行不成功,或者無返回的狀況,下面來講明一下:php

1.函數

exec ( string $command [, array &$output [, int &$return_var ]] ) : string
  參數說明:
  1.$command   要執行的命令
  2.$output  執行結果
  3.$return_var 若同時設置 $output 和此變量,命令執行後的返回狀態會被寫入到此變量

2.例子

exec("ping www.baidu.com", $output);

正常來講執行結果會跟在服務器上直接執行ping沒區別,可是因爲某些緣由會致使意外狀況,下邊針對兩種狀況做出說明,以及解決辦法linux

2.1 權限問題

問題服務器

當咱們在服務器上直接執行linux系統命令時(此處以ping爲例),執行權限取決於咱們登錄用戶的權限,若是咱們登錄用戶爲 root ,則執行 ping的時候是用root來執行。但當咱們在網站上訪問的時候,咱們此時的用戶爲 www,若是不修改ping的執行權限的話,是沒法執行成功的。

解決函數

修改ping或者對應命令的執行權限
2.2 命令路徑問題

問題網站

還有一種狀況,當咱們用exec執行某個命令時,不報錯,也不返回結果,緣由是此命令沒有在環境變量配置的目錄下即 /etc/profile文件中,以 ifconfig爲例,咱們能夠用 whereis ifconfig,找出此命令具體路徑,好比路徑在 /usr/sbin下,兩種解決辦法:

解決code

1 複製命令到 /usr/bin下,也就是環境變量下的目錄(不太推薦)
2 直接將命令全路徑補全 exec('/usr/sbin',$output);(推薦)
3 在環境變量中增長目標目錄例如增長 /usr/sbin到目錄
相關文章
相關標籤/搜索