如何从 PHP 调用 R 脚本?
Posted
技术标签:
【中文标题】如何从 PHP 调用 R 脚本?【英文标题】:How to call R script from PHP? 【发布时间】:2018-01-22 15:21:49 【问题描述】:我有一堆 R scripts 进行一些计算并返回结果。我正在计划建立一个 php 网站,用户实际上可以提交一个表单,其中数据被传递到我的 R 脚本,处理然后将结果返回给 PHP 并更新界面。
计划是有一个数据库,所以当用户提交表单时,数据会存储在数据库中,以便 R 可以读取、处理输入,然后将结果插入数据库中,以便 PHP 可以获取它。但是,有两个问题:
-
我的 R 脚本如何知道某些值已存储在数据库中,以便获取这些值并进行处理?
当我的 R 脚本处理完数据并插入到 mysql db 时,我如何让 PHP 理解此时 PHP 需要查询数据库并获取值?
假设我的 R 脚本如下所示:
range<-1:20
m<-mean(range)
s<-sum(range)
print(m)
print(s)
如您所见,在这种情况下,输入是1
和20
来定义范围,输出是在我的网页上显示m
和s
的值。
知道如何实现吗? 谢谢!
【问题讨论】:
【参考方案1】:shell_exec()
或 exec()
可能是您在 PHP 中的最佳选择。 This answer explains the difference.
echo shell_exec("Rscript my_script.R $_GET['range']");
【讨论】:
那我这里不用mysql数据库了吧? 如果您需要输入在页面加载时保持不变,则将输入存储在数据库中。如果每次调用中都有大量数据,并且您使用数据库作为在语言之间保存数据的一种方式,那么很好(但这在问题中并不清楚)。如果数据只是传递且简短,则没有理由涉及数据库。 感谢您的回复.. 这很有帮助 除非你总是使用escapeshellarg()
来转义用户输入:echo shell_exec("Rscript my_script.R " . escapeshellarg($_GET["range"]));
【参考方案2】:
我不是专家,但已经完成了: /poorman.php
echo "
";
echo "Number values to generate:
";
echo "Submit";
echo ""
;
if(isset($_GET['N']))
$N = $_GET['N'];
// execute R script from shell
// this will save a plot at temp.png to the filesystem
exec("Rscript my_rscript.R $N");
// return image tag
$nocache = rand();
echo("");
?>
还有 R 脚本……
my_rscript.R
args <- commandArgs(TRUE)
N <- args[1]
x <- rnorm(N,0,1)
png(filename="temp.png", width=500, height=500)
hist(x, col="lightblue")
dev.off()
source
【讨论】:
基本上,你是在告诉我,我根本不需要数据库? 可以直接执行r脚本,是的。 在源代码中,他们提到一次只能有一个用户使用这个网络应用程序。我知道因为 R 脚本将忙于处理输入。我的脚本如何处理并发请求? 我不确定这个解决方案,但也许每次我们生成一个 R 脚本并且一旦完成我们就删除它? @Riad re concurrency:我建议尝试一下,看看是否有问题,如果有问题,然后再打开一个不同的问题? (包括您的代码!)您可能会发现这根本不是问题。以上是关于如何从 PHP 调用 R 脚本?的主要内容,如果未能解决你的问题,请参考以下文章