2013-11-11 4 views
2

Я пытаюсь запустить команду R из PHP с помощью exec. Я знаю, что было бы гораздо разумнее использовать RServer или соединение сокетов, но эти параметры в настоящее время мне недоступны.Невозможно запустить команду R из PHP. Проблемы с путями?

код выглядит следующим образом:

$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-data, и она отлично работает. Его единственный, когда вызывается из PHP, что он терпит неудачу.

Итак, теперь я думаю, что это проблема с путями. RandomForest является библиотека R и правильно установлен на коробке:

[email protected]<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.

Любые идеи?

+0

из R, попробуйте 'ss <- Sys.getenv(); ss [grep ("^ R _", names (ss))] 'или' ss [grep ("^ R_LIB", names (ss))] –

+0

Что я должен видеть здесь? Похож, что ss заполняется всеми данными env из оболочки. К сожалению, мой опыт работы с R очень ограничен, поэтому я не уверен, что я должен искать. – mrwooster

+3

'R_LIBS',' R_LIBS_USER'. («Руководство по установке и администрированию R», например http://cran.stat.sfu.ca/doc/manuals/R-admin.html, является ссылкой на этот материал.) –

ответ

2

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

ss <- Sys.getenv() 
ss[grep("^R_LIB",names(ss))] 
Смежные вопросы