Я пишу PHP-скрипт, который запустит программу на сервере.
Я делаю это с:
exec('myAppName');
Эта строка кода «работает» в том, что она фактически выполняет программу, однако я не могу заставить ее вернуться (продолжить) из этой строки.
Он будет просто висел там, пока я не закрою открытую программу или не превысит max_execution_time.
Мне что-то не хватает?
Чтобы выполнить фоновый процесс в PHP, вам нужно сделать что-то вроде этого:
function spawnBackgroundProcess($sProcessLine) { $aPipes = array(); $rProcess = proc_open($sProcessLine, array(), $aPipes); proc_close($rProcess); }
На самом деле это злоупотребляет семейством proc_ *, но это самый лучший способ печально.
(Не забывайте &!)
В руководстве для exec
, не будучи полностью понятным вопрос о ожидании запуска программы, указано, что возвращаемое значение должно быть
Возвращаемые значения: последняя строка из результата команды.
Другими словами, точно так же, как вы наблюдаете, чтобы вернуть последний вывод строки, exec
не вернется, пока не выйдет запущенная программа.
Вы должны использовать его, чтобы продолжить работу с остальной частью php.
В Unix / Linux используйте символ «&». ..
Хм или эта система, которая делает это .. черт возьми, не могу вспомнить сейчас – пойдет снова читать руководство.
Если вы хотите выполнить команду в фоновом режиме, не ожидая результата в сценарии, вы можете сделать следующее:
<?php passthru("/usr/bin/php /path/to/script.php ".$argv_parameter." >> /path/to/log_file.log 2>&1 &"); ?>
Здесь немало вещей.
Прежде всего: поместите полный путь к двоичному файлу php, потому что эта команда будет выполняться под пользователем apache, и у вас, вероятно, не будет псевдонима команды, такого как php, установленного этим пользователем.
Seccond: обратите внимание на 2 вещи в конце командной строки: «2> и 1» и «&». «2> & 1» предназначен для перенаправления ошибок на стандартный IO. И самое главное – «&» в конце командной строки, которая говорит терминалу не ждать ответа.
Третье: убедитесь, что у вас есть 777 разрешений в файле «log_file.log»
Наслаждайтесь!