Intereting Posts
Перенаправление пользователя с страницы входа на домашнюю страницу, если она проверена в Laravel Проверьте, существует ли удаленная страница с помощью PHP? Есть ли запрос MySQL, который может кодировать JSON именно таким образом? 3-уровневый массив в php для организации данных Ошибка несанкционированной ошибки 401 GCM Вставить строку в указанное положение Любой способ сохранить куки-файлы в памяти, а не на диске Как я могу выбрать только ближайший родительский узел текстовой строки, используя xpath для каждого соответствия Ошибка: вызов функции-члена get () для не-объекта Как создать массив для JSON с использованием PHP? Проверьте, включены ли файлы cookie PHP strtotime проблемы с минутами Переопределение полей проверки в WooCommerce 3 phpMyAdmin EXTREMELY медленно при загрузке главной страницы базы данных innoDB Как добавить большое количество напоминаний о событиях через API календаря Google с помощью PHP?

Как интегрировать PHP и R в Windows?

Имея некоторые проблемы, интегрирующие PHP и R. Я работаю из этой статьи:

http://www.r-bloggers.com/integrating-php-and-r/

R установлен и проверен, работая с нашим R-скриптом:

Rscript C:\inetpub\wwwroot\client\includes\decisionTreePredictor.R 20 10 O 1000 10000 5000 0.2 10.2 

Печать одного значения, которое является результатом его вычислений:

 [1] "0" 

(Путь к Rscript.exe задан в переменных среды Windows)

У меня есть PHP-скрипт, который использует exec (), который успешно тестирует команды, такие как:

 $result = exec('dir',$output,$returnVar); echo "<br>result ". print_r($result,true); echo "<br>output <pre>". print_r($output,true) , "</pre>"; echo "<br>return ". print_r($returnVar,true); 

возвращения:

 result 2 Dir(s) 117,749,354,496 bytes free output Array ( [0] => Volume in drive C is C_DRIVE [1] => Volume Serial Number is 7EB2-A074 [2] => [3] => Directory of C:\inetpub\wwwroot\client\temp [4] => [5] => 05/17/2014 10:29 PM . [6] => 05/17/2014 10:29 PM .. [7] => 05/16/2014 09:24 AM 5,181 dbimporttest.php [8] => 05/17/2014 10:29 PM 0 routput.txt [9] => 05/17/2014 11:42 PM 701 rscripttest.php [10] => 05/16/2014 04:59 PM 425 whoami.php [11] => 4 File(s) 6,307 bytes [12] => 2 Dir(s) 117,749,354,496 bytes free ) return 0 

Когда я пытаюсь запустить R-скрипт в команде exec, он терпит неудачу:

 $result = exec('Rscript.exe C:\inetpub\wwwroot\client\includes\decisionTreePredictor.R 20 10 O 1000 10000 5000 0.2 10.2',$output,$returnVar); echo "<br>result ". print_r($result,true); echo "<br>output <pre>". print_r($output,true) , "</pre>"; echo "<br>return ". print_r($returnVar,true); 

Возвращение:

 result output Array ( ) return 1 

Я бегаю:

  • Windows Server 8 R2
  • IIS 8
  • PHP 5.5
  • R 3.1

Невозможно заставить exec () работать или выводить ошибки, которые можно использовать, я решил искать альтернативный маршрут. Использование COM-класса, похоже, дало мне то, что я искал.

Вот окончательный, операционный код:

 $command = 'C:\Program Files\R\R-3.1.0\bin\Rscript.exe C:\inetpub\wwwroot\client\includes\decisionTreePredictor.R 20 10 O 1000 10000 5000 0.2 10.2'; $pCom = new COM("WScript.Shell"); $pShell = $pCom->Exec($command); $sStdOut = $pShell->StdOut->ReadAll; # Standard output $sStdErr = $pShell->StdErr->ReadAll; # Error echo "<pre>$sStdOut</pre>"; 

Странно, что я не мог заставить exec () выполнять эту работу, поскольку это похоже на решение, предпочитаемое большинством блоггеров, обсуждающих интеграцию R / PHP.

Во всяком случае, я надеюсь, что это решение поможет любому, кто окажется в моей ситуации!

PS Вам нужно убедиться, что расширение включено в php.ini (по умолчанию оно установлено при установке): extension = php_com_dotnet.dll