如何从 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)

如您所见,在这种情况下,输入是120 来定义范围,输出是在我的网页上显示ms 的值。

知道如何实现吗? 谢谢!

【问题讨论】:

【参考方案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 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何从需要 SUDO 的 php 调用 shell 脚本?

如何从需要SUDO的php调用shell脚本?

从php.in windows调用python脚本

如何在自定义 PHP 脚本中调用 WordPress 函数

在HPC群集上从八度调用R脚本时出错

从 PHP 调用 Perl 脚本并传入变量,同时还使用可变的 perl 脚本名称