Запуск внешнего приложения

Статус
В этой теме нельзя размещать новые ответы.

ocheretko

Постоялец
Регистрация
28 Фев 2009
Сообщения
111
Реакции
50
Здравствуйте. Подскажите пожалуйста, как запустить внешнее приложение, и не ждать завершения его работы, а продолжить выполнение скрипта?
 
например в фоновом режиме через командную строку

skript.php
PHP:
<?
//параметры из командной строки
$par1 = $_SERVER['argv']['1']; 
$par2 = $_SERVER['argv']['2']; 
$output = shell_exec("ffmpeg -i ".$par1." 2>&1");
file_put_contents($par2, $output);
?>
а скрипт запуска
PHP:
//запуск скрипта в фоновом режиме windows - "> nul", unix - ">/dev/null &"
exec("/usr/local/bin/php /home/ffmpeg/skript.php file.mp4 log1.txt >/dev/null &");
 
а скрипт запуска
PHP:
//запуск скрипта в фоновом режиме windows - "> nul", unix - ">/dev/null &"
exec("/usr/local/bin/php /home/ffmpeg/skript.php file.mp4 log1.txt >/dev/null &");

перед запуском скрипта надо вызвать nohup

PHP:
//запуск скрипта в фоновом режиме windows - "> nul", unix - ">/dev/null &"
exec("nohup /usr/local/bin/php /home/ffmpeg/skript.php file.mp4 log1.txt > /dev/null &");
 
В виндоус это возможно? Из под пхп запустить экзешник и чтоб пхп не дожидаясь его завершения продолжал работать?
PHP:
// запускаем долгую программу program.exe
shell_exec('start program.exe');
// продолжаем работать не ожидая окончания program.exe
echo 'continue with work';
 
в windows напрямую не получится, но можно по другому запустить, например зарегистрировать команду или запуск программы в планировщик задач.
Запустить cmd и управлять с командой at - покажет список задач, или тот же список в control panel -> scheduled tasks

Этот скрипт через минуту после запуска запустит команду netstat и сохранит список соединений в файл c:\log.txt
PHP:
<?
$start_time = date('H:i', strtotime('+1 minute'));
echo $start_time;
$output = shell_exec('at '.$start_time.' cmd /c "netstat > c:\log.txt"');
echo $output;
?>
програма запускается через start, тогда такой скрипт запустит калькулятор на следующей минуте
PHP:
<?
$start_time = date('H:i', strtotime('+1 minute'));
echo $start_time;
$output = shell_exec('at '.$start_time.' cmd /c "start c:\windows\system32\calc.exe"');
echo $output;
?>
планировщик задач запускает программы в фоновом режиме, значит окна запущенной программы не будет видно, а если надо чтоб показывало программу юзеру (разрешить команде или программе взаимодействовать с пользователем) то добавить параметр задачи /interactive.

Такой скрипт покажет калькулятор на следующей минуте после запуска скрипта
PHP:
<?
$start_time = date('H:i', strtotime('+1 minute'));
echo $start_time;
$output = shell_exec('at '.$start_time.' /interactive cmd /c "start c:\windows\system32\calc.exe"');
echo $output;
?>
без дополнительных параметров задачи выполняются один раз и удаляются из планировщика автоматически.
 
В своих консольных скриптах под win использую:
PHP:
pclose(popen('start parser.php', 'r')); // Откроет файл с результатами в связанной программе, продолжив при этом работу скрипта!
Вместо parser.php подставляй имя программы или файл, который необходимо открыть в связанной с ним программе.

Добавлено через 7 минут
 
перерыл довольно много гугля, пока не вышел через какой-то форум на ответ на самом же сайте пхп :) незаметил его, хотя там показывали в нескольких комментах.

PHP:
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run($cmd, 0, false);
unlink($WshShell, $oExec);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху