Я пытаюсь запустить команду 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.
Любые идеи?
из R, попробуйте 'ss <- Sys.getenv(); ss [grep ("^ R _", names (ss))] 'или' ss [grep ("^ R_LIB", names (ss))] –
Что я должен видеть здесь? Похож, что ss заполняется всеми данными env из оболочки. К сожалению, мой опыт работы с R очень ограничен, поэтому я не уверен, что я должен искать. – mrwooster
'R_LIBS',' R_LIBS_USER'. («Руководство по установке и администрированию R», например http://cran.stat.sfu.ca/doc/manuals/R-admin.html, является ссылкой на этот материал.) –