Не могу запустить команду 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.

Есть идеи?

 2
Author: mrwooster, 2013-11-11

1 answers

Соответствующими переменными среды являются R_LIBS и R_LIBS_USER; Руководство по установке и администрированию R является соответствующей ссылкой. Если вы хотите увидеть, как эти переменные задаются в сеансе R, попробуйте

ss <- Sys.getenv()
ss[grep("^R_LIB",names(ss))]
 2
Author: Ben Bolker, 2013-11-11 20:05:47