2011-11-05 48 views
3

我有一個R腳本運行得很好,當我從命令行運行它並將映像保存到文件系統時。但是,當我運行它從PHP腳本使用以下命令:在ubuntu下運行R在php下

exec("cat my_rscript.R | /usr/bin/R --vanilla"); 

它不運行。請注意,當我在命令行中運行它時,我正在使用完全相同的調用。我很確定我在正確的目錄中(php文件和R腳本位於相同的目錄中)。可能是因爲我無法從php運行R腳本?我認爲這與我運行R-64位和php的事實只有32位有關,但我不確定這是否是問題所在。

+0

我的第一個猜測是您執行PHP調用的用戶無法訪問一個或多個資源(文件系統方式)。 –

+0

你的意思是訪問R腳本或文件夾? – jkjk

+0

兩者。如果用戶('apache'?)無法訪問或者,那麼你可能不會有任何輸出。 –

回答

2

我建議以下步驟來調試,這一切通過命令外殼,從PHP:

  1. 獲取的which R輸出(確保它的路徑)(例如which R > where_is_r.txt
  2. 獲取shell開始執行的位置,即R被調用的路徑(應該是「where_is_r.txt」文件的位置)
  3. 創建一個簡單的helloworld.r(例如寫入正態分佈隨機值到文本文件),並執行Rscript --vanilla /path/to/helloworld.r
  4. 替換helloworld.r與你的腳本,並執行Rscript --vanilla /path/to/my_script.R

如果這些不露哪裏出了問題,你可能需要保存錯誤輸出(STDERR)和輸出(stdout)。這可以在R內完成,但最好通過bash來完成。有關如何執行此重定向的指南,請參閱this page

此外,通常最好使用完全指定的路徑,而不是依賴於在特定目錄中調用的shell。完整的規範可以是絕對路徑或相對路徑,但相對路徑和符號鏈接比絕對路徑更難調試。