【问题标题】:Running R script from php webpage从 php 网页运行 R 脚本
【发布时间】:2015-02-12 14:40:13
【问题描述】:

我正在尝试构建一个允许用户运行 R 脚本的 php 文件,这样他们就不需要在服务器中打开会话,只需打开浏览器即可。

脚本中的通常 bash 运行良好(比如回显“某物”,复制和移动数据文件,...),但 R 脚本没有运行。 R 用 Rscript 调用

Rscript --no-save --no-restore --verbose ./RAMS-mapa-onades-zones-manual.R > outputFile.Rout 2>&1

R 输出给出此错误

running
  '/usr/lib/R/bin/R --slave --no-restore --no-save --no-restore'

Error in library("rgdal") : there is no package called 'rgdal'
Execution halted

好吧,library(rgdal) 是 R 脚本的第一行。 Rgdal 存在于 R 安装中,并且脚本从命令行运行良好(Rscript myscript.R)。

从php开始,运行R的用户是www-data,而在终端上用户是meteo。在我看来,需要在 php Rscript 执行中设置一些环境变量,但我找不到方法。

有什么想法吗?提前致谢

【问题讨论】:

  • 我不知道,但是...我要检查的第一件事是...但是脚本正在运行,在任何用户的任何环境中,都可以访问相同的环境变量并且知道库路径。 (或其他)似乎没有在该范围内定义的东西,也许。我会尝试在没有任何库的情况下运行一些东西......比如打印语句或其他东西。
  • 作为第一个猜测 - 机器上可能有多个 R 安装?检查library() 上的lib.loc 参数。
  • @LauriK library() 报告 /home/meteo/R/i686-pc-linux-gnu-library/3.1/usr/local/lib/R/site-library/usr/lib/R/library 中的包和警告 In library() : library ‘/usr/lib/R/site-library’ contains no packages

标签: php r bash


【解决方案1】:

似乎我们在 cmets 中找到了根本原因。库路径不匹配,但您可以通过 lib.loc 参数使它们与 library() 匹配。像这样:

library(rgdal, lib.loc = c("/home/meteo/R/i686-pc-linux-gnu-library/3.1", "/usr/local/lib/R/site-library", "/usr/lib/R/library"))

【讨论】:

  • 嗨@Laurik,你是对的。 lib.loc 有问题。添加您的建议带来了另一个问题,错误消息说当 rgdal 加载需要时 sp 不可用。最后,我将所有 R 库位置链接到 /usr/lib/R/site-library,现在 R 脚本运行良好。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多