exec команда висит в php с ajax - PullRequest
0 голосов
/ 15 апреля 2019

Команда exec висит на сервере Windows с php. Я называю это ajax множество раз (используя «for»), и я понятия не имею, почему. Я уже пробую те:

  pclose(popen("start /B ". $command, "w"));
  pclose(popen($command_str, 'a'));` // tried with 'w' too

это:

WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run($command, 1, true); `

это:

   shell_exec('start /B $command');

это:

  error_reporting(E_ALL);
  $handle = popen($command.' 2>&1', 'r');
  echo "'$handle'; " . gettype($handle) . "\n";
  $read = fread($handle, 2096);
  echo $read;
  pclose($handle);

это:

   exec($command_str." >> error.txt 2>&1 &",$out,$code); 

Я попробовал почти все, что видел в стеке:

PHP exec () в качестве фонового процесса (среда Windows Wampserver)

PHP на машине с Windows; Начать процесс в фоновом режиме

и уже знаете о: «Если программа запускается с этой функцией, чтобы она продолжала работать в фоновом режиме, выходные данные программы должны быть перенаправлены в файл или другой поток вывода. В противном случае PHP будет зависать до выполнения Программа заканчивается. "

Никто из предыдущего не работал для меня. П.С .: Я не хочу, чтобы выполнение команды игнорировалось, как в popen (). Я хочу, чтобы php дождался завершения и возврата exec.

КОМАНДА, КОТОРУЮ Я ХОЧУ, БУДЕТ:

     $command_str = "sox.exe /audio/123.wav -e signed-integer 
     123.wav.conv.wav"; 

Я уже поставил 2> & 1, ничего не изменилось

P.S .: любая другая инструкция приводит к зависанию exec. Пример: sox.exe, cd, dir и т. Д.

ФИНАЛЬНЫЙ КОД:
JavaScript:

 for (var i=0; i<resultado.length; i++){
            $.ajax({
                    cache: false,
                    type: "POST",
                    url: 'getAudiosFTP.php',
                    success: function(final){
                        console.log(final);
                    }});
 }

PHP:

  $resposta=Library::downloadFileFromFtp($Result['server'], $file, 
  $path_destino, $Result['user'], $Result['password']); 

    if ($resposta==1){
        $convexe_dir = str_replace(array('/'), '\\', 
         '/sistema/ligacoes/sox/sox.exe');
        $command_str = "{$convexe_dir} {$path_destino} -e signed-integer 
       {$path_destino}.conv.wav 2>&1";
        exec($command_str, $output);                
        unlink($path_destino);
        rename("{$path_destino}.conv.wav", $path_destino);
   }
...