2016-07-07 95 views
-1

我有一個design tool extension在我正在使用的網站上使用。設計工具使用inkscape命令行來導出圖像。有一個php界面可以用於最終調用shell_exec($inkscapeCmd)的命令行操作。在注意到圖像文件沒有被導出之後,我創建了一些測試來嘗試和調試。我改變了執行行shell_exec($inkscapeCmd . ' 2>&1')才能看到錯誤消息:無法在PHP shell_exec()命令中運行inkscape

sh: inkscape: command not found

...因爲它肯定安裝和方便這是奇怪的。我添加了一個檢查用戶我的測試頁上,以確保這些命令是由用戶來執行與訪問Inkscape中:

$processUser = posix_getpwuid(posix_geteuid()); echo 'user: ' . $processUser['name'];

然後我SSH方式登錄到服務器,以確認我可以運行與那個用戶相同的命令,並且能夠在沒有任何問題的情況下運行它們(這也證實了inkscape在PATH中)。我能夠從PHP沒有問題,運行等,基本shell命令,就像這樣:

echo shell_exec('ls');

但現在我處於虧損狀態;我不知道還有什麼要檢查,以確定爲什麼我得到'命令未找到'錯誤。任何方向都會有幫助。

服務器(而不是舊的,我知道):過程不具備位置

  • 的CentOS 6.7
  • PHP 5.3.3
  • Inkscape的v0.47
+0

爲什麼這會降低投票率?我以爲我問了一個合理的問題,最終得到了我正在尋找的答案;設計工具需要可執行文件的路徑(它在配置文件中被錯誤地定義)。 – spencerready

回答

1

在它的道路上漫步。

您將不得不提供可執行文件的完整路徑。

的/ usr /斌/ Inkscape中

在命令行鍵入 'whereis Inkscape的' 找到是位置。

+0

這樣做。你有什麼機會可以解釋爲什麼這個過程需要在這種情況下的完整路徑?它不使用進程用戶的路徑嗎? – spencerready

+0

您登錄的用戶與Web服務器運行的用戶不是同一個用戶。在命令行上執行'echo $ PATH'。這會顯示你的路徑。您可以運行可執行文件而無需指定完整的程序路徑。 Web服務器運行的用戶很可能被分到最低限度。這就是爲什麼如果你看到很多基於網絡的軟件,你需要填寫某些系統軟件的路徑。 –

+0

以前,當我從命令行測試時,我確實以web服務器用戶身份登錄。當Web服務器是啓動器時,是否有某種修改的設置/路徑?不知道這是否是正確的方式來提出這個問題? – spencerready