2011-01-27 52 views
12

我對R相對比較陌生,對Linux(Ubuntu)命令行也很新穎。我正在嘗試在PHP中編寫一個頁面,其中包含一個我想在R中執行的命令,然後將結果傳回以便能夠與它們一起工作。我試過下面的代碼的變化,但我只得到將R歡迎消息作爲我的輸出:通過PHP使用R

<?php 

$rQuery = "\"echo 3 + 1;\" | /usr/bin/R --no-save"; 
exec($rQuery, $output); 
print_r($output); 

?> 

當我手動輸入$ rQuery在命令行的結果是我所期待的:[1] 4.
我知道我必須在那裏結束一些事情,但是我一直沒能通過自己的搜索找到答案。

回答

11

幾點:

  1. 你想--slave作爲選項,這意味着--no-save並開啓關閉問候;更多信息請參閱手冊。

  2. 真的想要的是傑夫·霍納的優秀R-內的Apache,看到here for more。它也可以使用模板框架,如brew。最重要的是,Jeff現在爲您提供了一個.deb軟件包:在/etc/apt/sources.list中使用deb http://ppa.launchpad.net/jeffreyhorner/rapache/ubuntu lucid main

  3. 如果你堅持要用php管道,請考慮littler腳本前端Jeff和我寫的。它會啓動速度比R.

+1

1.謝謝!你不知道這多麼令我討厭。 2.這看起來非常有用,一旦我在這些東西中變得更好,我會研究它。這正是我所尋找的。感謝您的寫作!如果其他人好奇,我可以通過使用以下命令獲得準確的結果:「<?php $ rQuery =」r -e'cat(3 + 1)'「; system($ rQuery);? >「 – crix 2011-01-27 17:24:37

+0

快樂。 Littler(例如`/ usr/bin/r`)出於同樣的原因使用該選項啓動它的嵌入式R實例。 – 2011-01-27 17:27:14

1

無論用戶apache運行的是什麼,可能都沒有相同的環境變量或權限,因爲它們是手動從shell運行的。找出Apache運行的用戶名,並確保它具有正確的權限和環境變量。

+0

謝謝,在R中嘗試更復雜的命令時,我開始遇到這個問題。 – crix 2011-01-27 20:31:47

6

對於一些這個簡單,你甚至不應該使用PHP,因爲你可以用RApache,brew包和普通的HTML僅僅做到這一點(CSS/JS是可選的)。請閱讀the RApache manual並參閱Jeroen Ooms的video tutorial。您還應該閱讀brew手冊。傑夫確實做得很好!

簡而言之,你只需要設置apache2.conf的.htaccess文件。您可以使用<FilesMatch>指令,而不是使用<Directory><Location>指令,以便將文件與regexpr匹配。下面是一個示例的.htaccess

<FilesMatch "^.+\.rhtml$"> 
    SetHandler r-script 
    RHandler brew::brew 
</FilesMatch> 

我使用特殊的文件擴展名.rhtml,我內<%%>標籤(見brew文檔)混合有R語法HTML。我沒有使用brew與PHP,因爲brew與HTML做的伎倆。

不管怎樣,你說,你想:

用PHP編寫的網頁包含 命令我想中的R 執行,然後將結果傳遞迴是 能夠一起工作他們

  • 關於執行來自用戶輸入的命令......好吧......不要這樣做!特別是不允許用戶執行自定義命令,因爲他們可以輕鬆地通過systemfile.*命令並使您的系統癱瘓!您可以使用AppArmor的,但它仍然是一個很長的路下來...
  • 專注於簡單的HTML表單和使用POSTGETCOOKIESFILES服務器變量RApache提供,並然後操縱R腳本
  • 關於「傳遞結果」的輸入,您可以使用XML R包或rjson(我最喜歡的,我推薦它)。然後,您可以將R對象傳遞給toJSON函數,並使用JavaScript反序列化它。當然,只有當你的客戶端是網頁瀏覽器時纔是這樣,否則,如果你想將某些信息傳遞給嵌入式系統,你應該使用標準的XML-
  • 這樣簡單的事情,你不需要需要PHP。無論如何,你應該聯繫的Jeroen,我知道他用了一些PHP在他Stockplot應用

如有其他問題,請RApache mailing list

...和你好R-webdev世界! =)