Не удается выполнить RScript из php

Новое здесь, также новое для кодирования с php. В настоящее время я пытаюсь выполнить RScript из php, используя функцию exec(). Когда я запускаю php-код на локальном хосте, он открывает программу RStudio, но не выполняет код в сценарии. (Это заставляет меня думать, что это не проблема каталога, потому что он действительно может найти файл) Вот классический пример, который я пробовал. PHP-код:

<html>
  <head>
    <h1>PHP and R Integration Sample</h1>
  </head>
  <body>
        <?php
      // Execute the R script within PHP code
      // Generates output as test.png image.
    exec("RvsPHP.R");
    ?>
    <img src="test.png?var1.1" alt="R Graph">

  </body>
</html>

Затем мой Rscript (сохраненный как «RvsPHP.R» в том же каталоге):

x <- rnorm(6,0,1)
png(filename="test.png", width=500, height=500)
hist(x, col="orange")
dev.off()

Меня не интересует вывод Rscript, меня интересует только то, что он выполняется (т.е. создает изображение .png). PNG изображение создано, и все работает просто отлично. Если я этого не сделаю, RStudio останется открытым без каких-либо действий, а браузер будет загружаться до тех пор, пока не истечет время ожидания. Я не могу найти способ избежать ручного нажатия клавиш Ctrl+Enter. Я также безуспешно пробовал использовать функции passthru() и system() php.

Заранее спасибо! С уважением, ХуанФран


person JFR    schedule 25.05.2020    source источник
comment
У вас есть шебанг в вашем R-скрипте?   -  person Adam Winter    schedule 25.05.2020
comment
Вы вызываете RStudio из PHP или Rscript? (Если первое, то это не кажется устойчивым с точки зрения веб-разработки.)   -  person r2evans    schedule 25.05.2020
comment
У меня нет шебанга. Должен ли я добавить один в начале файла R? Я думаю, это то, что вы имеете в виду: rdocumentation.org/packages/ utils/версии/3.6.2/темы/Rscript. С другой стороны, должен ли я изменить что-то еще в файле php?   -  person JFR    schedule 31.05.2020


Ответы (2)


Я собираюсь предположить, что: 1) Rstudio - это не программа для выполнения Rscripts, это программа, которая поможет вам их написать. 2) У вас нет шебанга в сценарии. Итак, вам нужно установить Rscript, чтобы вы могли выполнить файл с этой средой, и в этом случае ваш PHP-код будет читать что-то вроде

exec("Rscript RvsPHP.R");

или у вас шебанг в сценарии. В любом случае вам нужно указать машине, с чем выполнять этот скрипт, и это должно быть что-то, что просто выполняет скрипты.

person Adam Winter    schedule 25.05.2020
comment
И с другой точки зрения: концепция приложения по умолчанию (при отсутствии явного указания) сильно различается между контролируемым и неконтролируемым выполнением. Хотя может случиться так, что ваша (JFR) ОС настроена для первого (обычного!), вам нужно подумать о втором намерении и четко понимать, что должен делать веб-сервер, когда вы не смотрите. - person r2evans; 25.05.2020
comment
Это правда, я новичок в веб-разработке, я запомню, что вы сказали о программе по умолчанию для выполнения определенных файлов. - person JFR; 01.06.2020

Теперь это работает, это не значит, что это лучший способ, открыты для предложений!

(Как они упоминали, RStudio - это просто программа интерфейса)

Вот что заставило это работать:

Я изменил расширение файла с .R на .Rscript. PHP-код остался прежним, за исключением части exec(), которая теперь выглядит так: exec("RvsPHP.Rscript");

Shebang, похоже, не влияет на это (пробовал как с, так и без), но, как они упоминают, вероятно, это полезная концепция для выполнения веб-сервера. (?) Я также добавил файлы RScript.exe и R.exe в качестве переменной среды, не уверен, что это тоже что-то дало.

Определенно переломным моментом стало изменение расширения файла с .R на .Rscript (программа по умолчанию, открывающая файл, меняется с RStudio на R). Спасибо всем, JF

person JFR    schedule 01.06.2020