Как запустить инструменты на php сервере одновременно - PullRequest
0 голосов
/ 17 февраля 2019

Я использую веб-портал на сервере xampp (win 7), работающем в облаке.

  • Пользователь загружает файл .xlsx, который сохраняется в папке
  • Пользователь выбираетдата и опции, которые будут использоваться позже
  • Пользователь нажимает кнопку отправки, которая вызывает форму automatic.php
  • Эта форма вызовет 2 отдельных инструмента 1 в C #, другой в R

    <form action="tools/automatic.php" method="post" target="_blank" enctype="multipart/form-data">
    

automatic.php

  • Использует предоставленную пользователем информацию для создания 2 .bat файлов в следующем формате:

presentation.bat

START "" "C:\Tools\1\Presentation.exe" 2019 01 25 00 templatename users\thisfolder "inputfile.xlsx"
exit

analytics.bat

R CMD BATCH --no-save --no-restore "--args 2019 01 25 00 templatename users\thisfolder" C:\Tools\2\analytics.R analytics.out &

Затем он вызывает эти 2 .bats какэто

запустить R

$Rbatpath = 'C:\NPOSL\\' .$userDirectory.'\analytics.bat';
$Rcomand= exec($Rbatpath);
pclose(popen("start " . $Rcomand, "r"));

запустить C

$batpath = 'C:\NPOSL\\'.$userDirectorytunnel.'\presentation.bat';
$Ccomand= exec($batpath);
pclose(popen("start " . $Ccomand, "r"));

echo "<script type='text/javascript'>window.close();</script>";

Это работает без проблем, и яПомните, что это не лучший способ справиться с этим.

  • Он вызывает инструмент R и запускает его в течение 30 секунд.
  • После этих 30 секунд вызовет инструмент C # и запустит его в течение 20 секунд.секунд
  • После того, как эти 20 секунд закрываются, окно

Мне нужно, чтобы оба инструмента запускались одновременно

Я искал стекопоток в течение многих часови попробовал каждую возможную комбинацию

  • Написание «start» в php, но не в .bat (и) наоборот,
  • Я пытался даже не создавать.bat и запускайте инструменты напрямую из exec ()
  • add / B, чтобы попытаться запустить в фоновом режиме

Независимо от того, что я пытаюсь, хотя он работает без проблем, всегда ждетчтобы все закончилось

Не могли бы вы помочь мне запустить все одновременно?

В идеале я хотел бы, чтобы инструменты заканчивались до закрытия окна, но это излишне иМне все равно, если это невозможно.


РЕДАКТИРОВАТЬ

Я изменил его на:

$Ccomand = exec("the content which was inside .bat" . " > /dev/null &") 

и этовсе еще ожидает завершения выполнения.

1 Ответ

0 голосов
/ 17 февраля 2019

Можно ли объединить содержимое двух пакетных файлов в один?

Проблема в exec(), который запускает процессы асинхронно.

Что произойдет, если вы обойдете это с помощью pclose(popen("start ".$Rbatpath,"r")) или $Rcommand = "start ".$Rbatpath; pclose(popen($Rbatpath,"r"))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...