R和php之间的集成

per*_*ndi 5 php ubuntu r

我有一个PHP脚本,为脚本R的每个参数发送3个值.

$typeOfData = 1;
$month = 2;
$year = 2014;

exec("Rscript C:/xampp/R-script/plot.R $typeOfData $month $year", $response);

var_dump($response);
Run Code Online (Sandbox Code Playgroud)

还有一个接收这些参数的R脚本.

library(rjson)

args <- commandArgs(TRUE)
tmp <- strsplit(args, " ")
typeOfData <- tmp[[1]][1]
month <- tmp[[2]][1]
year <- tmp[[3]][1]

output <- list(imgname="imgs/tmax.tiff")
cat(toJSON(output))
Run Code Online (Sandbox Code Playgroud)

当我运行php脚本时,变量$ response不显示R生成的json,它返回一个空集.有没有其他方法来集成R和PHP.

小智 6

有几个选项,但一个选项是使用RApache.按照http://rapache.net/manual.html中的说明安装RApache

在httpd.conf中设置Apache指令,这将确保/ var/www/brew下的所有文件都被解析为R脚本

<Directory /var/www/brew>
    SetHandler r-script
    RHandler brew::brew
</Directory>
Run Code Online (Sandbox Code Playgroud)

使用文件名plot.R的API创建R脚本,并将其放在/ var/www/brew文件夹下.此R脚本文件可以如下所示:

<%
library(rjson)

args <- GET
tmp <- lapply(args, FUN=function(x) strsplit(x, " "))
typeOfData <- tmp[[1]][1]
month <- tmp[[2]][1]
year <- tmp[[3]][1]

output <- list(imgname="imgs/tmax.tiff")
cat(toJSON(output))
%>
Run Code Online (Sandbox Code Playgroud)

标记 GET

现在,您可以通过调用PHP来调用您的API,就像调用任何其他Web服务一样http://localhost/brew/plot.R?typeOfData=1&month=2&year=2014.将localhost替换为您托管API的服务器的IP.

使用RApache时,每次获取GET, POST, COOKIES, FILES, SERVER传递给API调用的变量.因此,如果您想在呼叫中使用POST而不是GET示例,请继续.有关这些变量,请参阅http://rapache.net/manual.html中的文档.

这几乎与此处所示的答案相同:部署包含R功能的API的最简单方法是什么?