从PHP中运行Rscript:无法加载共享库

时间:2018-04-08 22:02:51

标签: php r apache rhel rscript

我正在尝试从PHP中运行R代码。我使用的是RHEL 7.4。

但是,由于Apache以与安装R软件包不同的用户身份运行,因此无法加载软件包:

我的PHP代码有这一行:

echo shell_exec("(Rscript -e 'library(lme4, lib.loc = \"/var/www/R/lib\")')2>&1");

在浏览器中产生此错误:

Error: package or namespace load failed for 'lme4' in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/var/www/R/lib/Rcpp/libs/Rcpp.so':
  /var/www/R/lib/Rcpp/libs/Rcpp.so: failed to map segment from shared object: Permission denied
Execution halted

文件/var/www/R/lib/Rcpp/libs/Rcpp.so具有权限775,因此我认为权限实际上不是问题。

如何告诉Apache / PHP在哪里查找共享库?

服务器不面向公众,因此我会采取任何解决方案,正确访问共享库,向用户apache sudo访问NOPASSWD以作为我的用户运行(或类似的鲁莽,因为那并没有真正发挥作用......)。

谢谢!

1 个答案:

答案 0 :(得分:0)

这部分归因于Red Hat中的SELinux设置。我不完全确定这是以Red Hat为中心的,还是特定于我大学的配置(谁首先安装了Red Hat)。

最初:

$ getenforce
Enforcing

修正:

$ sudo setenforce 0
$ getenforce
Permissive

持久性修复:修改/etc/selinux/config以获得行

SELINUX=Permissive

归功于this StackOverflow线程。

相关问题