我正在尝试从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
以作为我的用户运行(或类似的鲁莽,因为那并没有真正发挥作用......)。
谢谢!
答案 0 :(得分:0)
这部分归因于Red Hat中的SELinux设置。我不完全确定这是以Red Hat为中心的,还是特定于我大学的配置(谁首先安装了Red Hat)。
最初:
$ getenforce
Enforcing
修正:
$ sudo setenforce 0
$ getenforce
Permissive
持久性修复:修改/etc/selinux/config
以获得行
SELINUX=Permissive
归功于this StackOverflow线程。