2014-03-12 95 views
0

我有一個php腳本,其中一些系統命令運行良好,而其他系統命令不運行。沒有運行的命令可以複製並粘貼到shell中並運行得很好。系統命令不能在PHP中執行

系統:OSX 10.9.2(一切都更新)。

我已經嘗試了許多不同的命令,如下所示。

反引號,exec()shell_exec()system()passthru()

此命令工作正常。

exec("drush si -y --db-url=mysql://user:[email protected]:3306/dbname"); 

但是這些命令不運行。

exec("drush sql-sync @remote.staging @dev.anme -y"); 
exec("git ls-remote --heads [email protected]:blablaname/name.git"); 

不運行的命令可以複製並粘貼到shell並運行良好。我已使用getcwd()函數確保腳本正在正確的目錄中運行。

+0

爲什麼你認爲這些命令「沒有運行」?任何錯誤消息?您應該實施錯誤檢測和處理,以便您知道發生了什麼。至少你應該看看你的http服務器日誌文件來讀取錯誤消息,如果這些命令_really_沒有執行,我懷疑。 – arkascha

+0

Btw:你確定你的PATH是正確的?嘗試使用絕對路徑來嘗試執行這些命令。 – arkascha

+0

你的php.ini中的'disable_functions'的值是多少? – m79lkm

回答

1

如果您從Web瀏覽器調用具有exec()的php程序,它將以www用戶身份執行。所以www用戶可能沒有權限連接/同步到遠程主機。這就是爲什麼它在本地主機上工作並在遠程主機上失敗。

所以一個解決方案是

1)命令保存爲設置UID位bash腳本
2)(它可以是根或具有足夠權限的用戶)。
3)通過exec執行該bash腳本,以便它將作爲previlged用戶運行。
4)你應該限制你的程序,因爲setuid是危險的。

setuid