В *nix, запуска фоновых процессов, выполняется простым добавлением амперсанда (&) к команде. В Windows, это не так просто сделать из PHP.
Если вы используете в PHP функции системных вызовов, как exec, system, passthru или shell_exec, то эти методы приводят к подвисанию программы, которая ждет завершения работы вызванного процесса.
Описанные ниже методы предполагают, что вы используете PHP-CLI (работу с php из командной строки). Запуск PHP на веб-сервере требует правильной настройки конфигурации и прав доступа, такие как safe_mode, safe_mode_exec_dir и т.д.
Для примера, мы хотим вызвать cmd из PHP, но чтобы программа продолжала выполнять действия.
Приведенные ниже примеры не работают.
exec(«cmd»);
exec(«cmd >NUL»);
exec(«cmd /c cmd»);
exec(«start /b cmd»);
exec(«runas cmd»);
В каждом случае, PHP ждет пока cmd закроется.
Существуют несколько обходных путей, упомянутых в комментариях к документации по PHP к
функции exec()
Краткое изложение этих методов, в порядке предпочтения:
Начало процесса с использованием popen и pclose
Этот код должен работать на Linux и Windows.
$exe = «cmd.exe»;
pclose(popen('start «bla» "'. $exe. '" '. escapeshellarg($args), 'r'));
Начало фонового процесса с использованием объекта WScript.Shell
Этот код работает только в Windows.
$WshShell = new COM(«WScript.Shell»);
// Запуск cmd в свернутом состоянии
$oExec = $WshShell->Run(«cmd», 7, false);
// Запуск cmd в фоновом режиме, иконка на панели задач не выводится
$oExec = $WshShell->Run(«cmd /C dir /S %windir%», 0, false);
Более подробнее о методе Run()
читайте в msdn.
Начало фонового процесса с использованием утилиты PsExec
Этот метод требует установки бесплатной утилиты
PsTools от Sysinternals
exec(«psexec -d cmd.exe»);
Автор этого текста root{Собака}imcms.ru можете отправит ему инвайт.