Как через один скрипт php запустить другой скрипт php асинхронно?
Стоит такая задача: запустить скрипт b.php из скрипта a.php асинхронно, не дожидаясь от него ответа. Скрипт b.php выполняется около минуты и просто, с несколькими командами sleep, заменяет данные в бд и делает отправку сообщений. Нашел несколько вариантов решить свою задачу, например этот: клик
В общем-то у меня та же задача. Понял, что возможно смогу решить это с помощью:
exec($cmd . " > /dev/null &");
Мне нужно запустить скрипт b.php с входящими POST или GET параметрами(не важно каким вариантом из этих двух, просто передать массив значений, дальше скрипт уже обработает так, как мне нужно). Но при этом если я запускаю скрипт b.php несколько раз подряд, то, из-за синхронности php, второе выполнение не начнется, пока не завершится первое. Мне же нужно чтобы скрипт начинал выполнение сразу же. Поможет ли мне команда выше в такой ситуации? Если да, то как я могу ее использовать и передать определенные переменные в скрипт b.php? Прошу описать поподробнее ее использование.
Ответы (1 шт):
В скрипте a.php получить свой POST. Затем запустить через exec свой b.php с передачей ему данных POST. При вызове b.php через exec.. ты даешь команду терминалу, а браузер продолжает работает с a.php. Это не совсем асинхронность, но близкое к тому.
exec($cmd . " > /dev/null &");
В качестве $cmd будет что-то вроде этого "php /home/bitrix/www.site.com/cron/telegram.php param1=test1 param2=test2"
/dev/null & - тебе в принципе не нужно. Если b.php что-то выводит - можно указать, например, > /home/bitrix/text.txt
Там будет все, что выводит b.php