Команда 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);
}