Задать вопрос
talgatbaltasov
@talgatbaltasov
Freelancer

Как правильно запустить shell_exec в yii2?

Добрый день всем. Есть проект - бот для инстаграмма, который сам авторизуется, ставить лайки, отписывается и т.д. В базе хранится несколько тысячи аккаунтов от инстаграм. В проекте есть контроллер на yii2 называется BotController, там есть несколько функции. Например, есть функция логин, он смотрит в базу есть ли активная задача, если есть то авторизуется под тем пользователем кто создал эту задачу. Дальше по логике должен запуститься функция лайк, фоллов, анфоллов (то есть под этим пользователем должен ставится лайк, подписываться на кого-то и отписываться ).
Хочу запустить все это через shell_exec чтобы распараллелить. Как это сделать? Помогите, я новичок по shell_exec
  • Вопрос задан
  • 1968 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@matperez
Да вроде бы ничего особенного в запуске через shell_exec нет. На странице документации полно примеров php.net/manual/ru/function.shell-exec.php.

Мне кажется в вашем случае больше подошли бы очереди. Для вас это может быть рановато, но все же посмотрите в сторону Gearman или ZeroMQ.

Дело в том, что запуск через shell_exec скорее всего будет синхронным, т.е. ваш BotController будет ждать пока не закончится порожденный им процесс и никакого выигрыша в скорости вы не получите. Хотя вот тут есть примеры как можно запускать асинхронно stackoverflow.com/questions/222414/asynchronous-sh... вам придется самостоятельно придумывать как передать результат выполнения задачи обратно в основной поток.
Ответ написан
Комментировать
@Mirocow
я так сделал

private static function runConsole($command, &$status)
    {
        $cmd = $command . ' 2>&1';
        $handler = popen($cmd, 'r');
        $output = '';
        while (!feof($handler)) {
            $output .= fgets($handler);
        }
        $output = trim($output);
        $status = pclose($handler);
        return $output;
    }

var_dump(Helper::runConsole('ls'));
Ответ написан
Комментировать
@micronull
Есть библиотечка: https://github.com/vova07/yii2-console-runner-extension
Кроссплатформенно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы