2011-11-05 2 views
3

У меня есть сценарий R, который работает отлично, когда я запускаю его из командной строки и сохраняет изображение в файловой системе. Однако, когда я запускаю его из сценария php, используя следующую команду:Запуск R в php под ubuntu

exec("cat my_rscript.R | /usr/bin/R --vanilla"); 

Не работает. Обратите внимание, что когда я запускаю его в командной строке, я использую тот же самый вызов. Я уверен, что я в правильном каталоге (php-файл и R-скрипт находятся в одном каталоге). Что может быть причиной того, что я не могу запустить сценарий R из php? Я думаю, что это связано с тем, что Im работает R-64 бит и php всего 32 бит, однако я не уверен, если это проблема.

+0

Мое первое предположение - пользователь, с которого вы выполняете вызов PHP, не имеет доступа к одному или нескольким ресурсам (с файловой системой). –

+0

Вы имеете в виду доступ к скрипту R или папке? – jkjk

+0

Оба. Если пользователь ('apache'?) Не может получить доступ ни к одному, либо, то у вас, вероятно, не будет никакого вывода для получения. –

ответ

2

Я рекомендую следующие шаги для отладки это, все с помощью команд в оболочке из PHP:

  1. Получить выход which R (убедитесь, что он находится в пути) (например, which R > where_is_r.txt
  2. Получить местоположение, где начинается ваша оболочка, то есть путь, из которого вызывается R (это должно быть местоположение файла «where_is_r.txt»)
  3. Создайте простой helloworld.r (например, записывайте нормально распределенные случайные значения в текстовый файл) и выполнить Rscript --vanilla /path/to/helloworld.r
  4. Заменить helloworld.r со сценарием, и выполнить Rscript --vanilla /path/to/my_script.R

Если они не показывают, где проблема, возможно, потребуется сохранить вывод ошибок (STDERR) и выход (STDOUT). Это можно сделать внутри R, но лучше сделать это через bash. См. this page для руководства по выполнению этого перенаправления.

Кроме того, в общем случае лучше всего использовать полностью определенные пути, а не зависеть от оболочки, вызываемой в конкретном каталоге. Полная спецификация может быть либо абсолютным, либо относительным путем, но относительные пути и символические ссылки немного сложнее отлаживать, чем абсолютные пути.

Смежные вопросы