【问题标题】:Running Rscript from within PHP: cannot load shared libraries从 PHP 中运行 Rscript:无法加载共享库
【发布时间】:2018-09-18 06:38:22
【问题描述】:

我正在尝试从 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 以我的用户身份运行(或类似鲁莽的事情,因为那没有'实际上不起作用...)。

谢谢!

【问题讨论】:

    标签: php r apache rhel rscript


    【解决方案1】:

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

    原来:

    $ getenforce
    Enforcing
    

    修复:

    $ sudo setenforce 0
    $ getenforce
    Permissive
    

    持久修复:修改 /etc/selinux/config 以拥有该行

    SELINUX=Permissive
    

    感谢this StackOverflow 线程。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2014-11-06
      • 1970-01-01
      • 2014-10-26
      • 2021-11-04
      • 2021-10-12
      • 2018-11-27
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多