我正在尝试使用 exec 从 PHP 运行 R 命令。我知道使用 RServer 或套接字连接会更有意义,但这些选项目前对我不可用。
代码如下所示:
$cmd = '/var/www/r.sh';
exec($cmd, $out, $return_var);
r.sh 包含以下内容
#!/bin/bash
source /home/ubuntu/.bashrc
cd /home/ubuntu
R CMD BATCH RFile.R
当我从 shell 发出命令时,它工作得非常好。当我从 PHP 运行命令时,出现以下错误:
> test( read.csv("OutData.csv",header=T,stringsAsFactors=FALSE,encoding="UTF-8"))
Error in library(randomForest) :
there is no package called 'randomForest'
Calls: test -> library
Execution halted
我最初的想法是它可能与许可有关。我已授予 www-data read 对所有内容的执行权限,但无济于事。我还以 www-data 用户的身份从 shell 运行命令,它工作正常。只有从 PHP 调用它才会失败。
所以,我现在认为这是一个路径问题。randomForest 是一个 R 库,并且已正确安装在盒子上:
ubuntu@<removed>:/var/www$ sudo find / -name randomForest
/home/ubuntu/R/x86_64-unknown-linux-gnu-library/3.0/randomForest
/home/ubuntu/R/x86_64-unknown-linux-gnu-library/3.0/randomForest/R/randomForest
我找不到任何设置路径的 shell 环境变量,所以我不明白为什么该命令在 shell 中有效,而不是在 PHP 中有效。
有任何想法吗?