2011-03-01 47 views
2

我正在寫一個類讓我通過PHP訪問recutilsexec命令在終端中不起作用PHP

我在../database/中有一個名爲books.rec的數據庫文件和一個運行我的Recutils.php類的腳本。

我的課程只是用正確的參數啓動系統應用程序。

但是,當我嘗試使用recins與PHP的exec函數,該命令不起作用,它將在命令行中工作。

這是我的腳本執行的命令:

recins -f Title -v "Moi" -f Author -v "Moche" -f Location -v "loaned" -t Books ../database/books.rec

使用PHP:沒有,記錄未插入(沒有錯誤消息都太)。
在終端:好的,該命令做得很好,我的記錄被插入。

我也要做​​一個選擇使用recsel操作的方法和它的作品非常好,將它使用完全相同的文件(從exec運行過)。

那麼,有人可以解釋爲什麼命令不起作用,將另一個具有相同的文件工作?

感謝

PS:另外的信息:http://www.gnu.org/software/recutils/

+0

是否www數據的權限,運行命令行實用程序? – 2011-03-01 13:26:56

+0

您是否嘗試使用'exec'第二個參數來獲取輸出?(exec只會返回最後一行)。並且請注意,'../ database/books.rec'將與您的php腳本相關 – soju 2011-03-01 13:27:28

+0

@ tandu3:是的www-data有權限,因爲我在'recsel'的相同腳本中執行同樣的操作,它可以工作完美。 @soju:是的,我使用第二個參數,它是空的。 books.rec是可訪問的,因爲我完全可以在同一個腳本中使用它。 – 2011-03-01 13:34:08

回答

1

我會仔細檢查你是否從命令行和你的php腳本中以相同的用戶身份運行命令。這可能是問題所在。 exec('whoami')

你說你有一個腳本來啓動你的php腳本,它應該是那個用戶。

您可能還想運行一個更簡單的exec命令,看看它是否會先工作。

其他的事情嘗試:

  1. 請檢查stderr輸出exec('ls /tmp 2>&1', $out);這將標準錯誤重定向到標準輸出,所以你同時獲得。
  2. 嘗試使用php的shell_exec(),它將調用一個shell,就像從命令行(例如.bash)運行時一樣。 shell_exec('ls /tmp 2>&1 >> /tmp/log')甚至應該把所有的輸出放到一個日誌文件中。
  3. 我不認爲這會對你有所幫助,但如果所有其他方法都失敗了,可以嘗試一下,將其設置爲後臺進程並查看它是否完成。 exec('nohup php process.php > process.out 2> process.err < /dev/null &')。 &將設置命令在後臺運行並讓腳本繼續。

好運

+0

非常感謝!使用shell_exec('ls/tmp 2>&1 >>/tmp/log''我已經能夠看到權限被拒絕了(其他方法,我仍然沒有任何返回字符串)。事實上,我完全忘了在我的項目中更改權限(項目位於〜/ www而不是/ var/www)。我是否能夠讀取我的文件我不明白我無法寫入。不是問題在寫作中寫道,但在寫作權利方面。 – 2011-03-01 14:02:52

0

是PHP recins命令訪問?也是books.rec正確的路徑? 嘗試絕對路徑。

+0

如果假設如果我可以運行'recsel',我可以運行'recins'(它們以相同的方式和相同的時間安裝),是'recins'在我的$ PATH(如'recsel')中。並且是books.rec的路徑是正確的(我在完全相同的腳本中使用它)。 – 2011-03-01 13:37:14