Не могу запустить команду R из PHP. Проблема с путями?
Я пытаюсь запустить команду R из PHP с помощью exec. Я знаю, что было бы гораздо разумнее использовать 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
Когда я выполняю команду из оболочки, она работает абсолютно нормально. Когда я запускаю команду с 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-данных на выполнение всего, но безрезультатно. Я также выполнил команду из командной оболочки от имени пользователя www-данных, и она работает нормально. Его только при вызове из 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
Я не могу найти никаких переменных среды оболочки, которые задают пути, поэтому я не понимаю, почему команда работает из оболочки, но не из PHP.
Есть идеи?
1 answers
Соответствующими переменными среды являются R_LIBS
и R_LIBS_USER
; Руководство по установке и администрированию R является соответствующей ссылкой. Если вы хотите увидеть, как эти переменные задаются в сеансе R, попробуйте
ss <- Sys.getenv()
ss[grep("^R_LIB",names(ss))]