【发布时间】:2017-09-09 00:43:50
【问题描述】:
index.php:
<?php
echo exec("Rscript foo.R");
?>
foo.R:
#!/usr/bin/env Rscript
print("Before!")
#library(rJava);
print("After!");
网页输出:
[1] "After!"
现在这是一个预期的输出,因为exec 返回命令结果的最后一行。
现在因为我想访问需要rJava和RMongo库的mongodb数据库,所以我稍微修改了上面的代码。
foo.R:
#!/usr/bin/env Rscript
print("Before!")
library(rJava);
print("After!");
网页输出:
[1] "Before!"
现在我不明白这个输出。我期望与以前相同的输出,即[1] "After!"。就好像从库导入行开始的 R 代码根本不存在。我已经在R shell 中测试了上面的代码(以及我在从mongodb 抓取的数据上使用kmeans 的省略的代码),它按预期工作。
在 R 脚本中导入库有什么问题,该脚本应该从 PHP 执行?
更新 1:
有趣的是,如果我从命令行调用index.php,修改后的foo.R 会按照我的预期被调用和执行。
$ php index.php
Loading required package: methods
[1] "After!"
所以我的结论是我的普通用户帐户可以执行index.php,这反过来可以在foo.R 中加载库,但似乎www-data 用户帐户没有权限在R 中加载库。
所以现在的问题是如何授予www-data 加载R 库的权限?
更新 2:
我通过将 apache 用户从 www-data 更改为我当前的用户暂时解决了这个问题,但我知道这是一个巨大的安全风险,我正在寻找替代解决方案。
【问题讨论】:
-
当
www-user无法加载R库时,您是否准确检查过您在Apache 日志中遇到的错误?特别是,我认为您需要找到那些 R 库所在的位置。 -
另一种可能是用户
www-data的库搜索路径不正确,而不是权限问题。这些库是在系统范围内安装的,还是为您的本地用户安装的? -
@merlin2011 哦!我觉得是后者!现在我记得我已经在我的主目录中安装了库。我现在将在系统范围内安装它们,并尝试使用默认的 apache 用户。请将此作为答案发布,以便我可以接受它是否有效:)
标签: php r user-permissions