【问题标题】:Can't execute RScript from php无法从 php 执行 RScript
【发布时间】:2020-09-11 15:09:25
【问题描述】:

这里是新手,也是使用 php 编码的新手。 我目前正在尝试使用 exec() 函数从 php 执行 RScript。 当我在 localhost 中运行 php 代码时,它会打开 RStudio 程序,但不会执行脚本中的代码。 (这让我觉得这不是目录问题,因为它实际上可以找到文件) 这是我尝试过的经典示例。 php代码:

<html>
  <head>
    <h1>PHP and R Integration Sample</h1>
  </head>
  <body>
        <?php
      // Execute the R script within PHP code
      // Generates output as test.png image.
    exec("RvsPHP.R");
    ?>
    <img src="test.png?var1.1" alt="R Graph">

  </body>
</html>

然后,我的Rscript(同目录下保存为“RvsPHP.R”):

x <- rnorm(6,0,1)
png(filename="test.png", width=500, height=500)
hist(x, col="orange")
dev.off()

我对 Rscript 的输出不感兴趣,只是它被执行(即创建 .png 图像) 注意:一旦 exec() 使用 RStudio 打开文件,如果我手动点击 ctrl+enter 并执行脚本,就会创建 .png 图像并且一切正常。如果我不这样做,RStudio 将保持打开状态,没有任何事情发生,并且浏览器会一直加载,直到达到超时。我找不到避免按 ctrl+enter 的手动部分的方法。我也尝试过 passthru() 和 system() php 函数,但没有成功。

提前致谢! 问候,胡安弗兰

【问题讨论】:

  • 你的 R 脚本中有 shebang 吗?
  • 你是从 PHP 还是 Rscript 调用 RStudio? (如果是前者,从网络开发的角度来看,这似乎是不可持续的。)
  • 我没有shebang。我应该在 R 文件的开头添加一个吗?我想这就是你的意思:rdocumentation.org/packages/utils/versions/3.6.2/topics/Rscript。另一方面,我应该修改 php 文件中的其他内容吗?

标签: php r exec rscript


【解决方案1】:

现在可以了,不代表就是最好的办法,欢迎指教!

(正如他们提到的,RStudio 只是接口程序)

这就是它的工作原理:

我将文件扩展名从 .R 更改为 .Rscript。 除了现在的 exec() 部分之外,php 代码保持不变: exec("RvsPHP.Rscript");

shebang 似乎并没有影响它(无论有没有都试过),但正如他们提到的那样,对于 Web 服务器执行来说,这可能是一个有用的概念。 (?) 我还添加了 RScript.exe 和 R.exe 文件作为环境变量,不确定这是否也起到了作用。

很明显,游戏改变者是将文件扩展名从 .R 更改为 .Rscript(打开文件的默认程序从 RStudio 更改为 R) 谢谢大家,JF

【讨论】:

    【解决方案2】:

    我在这里大胆猜测一下:1) Rstudio 不是用来执行 Rscripts 的程序,它是一个帮助你编写它们的程序。 2)脚本中没有shebang。因此,您需要安装 Rscript,以便您可以在该环境中执行文件,在这种情况下,您的 PHP 代码将读取类似

    的内容
    exec("Rscript RvsPHP.R");
    

    或者你在脚本中有一个shebang。无论哪种方式,您都需要告诉机器用什么来执行该脚本,并且它必须是为了简单地执行脚本而构建的。

    【讨论】:

    • 从不同的角度来看:“默认应用程序”的概念(在没有明确说明的情况下)在“监督”和“无监督”执行之间非常不同。虽然您的 (JFR) 操作系统可能是为前者配置的(常见的!),但您需要考虑后者的意图,并清楚在您不观看时 Web 服务器应该做什么。
    • 没错,我是 web 开发的新手,我会记住你所说的执行某些文件的默认程序。
    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2016-02-18
    • 1970-01-01
    相关资源
    最近更新 更多