2011-01-27 60 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世界! =)