2015-02-19 2 views
2

Я работаю над проектом, используя PHP и Yii2 framework. У него есть задача, требующая много запросов на получение данных через API, и для завершения требуется одна минута. Чтобы избежать ожидания пользователя, я попытался использовать функцию exec() и перенаправить вывод в другой файл. Чтобы сделать лучше UXexec with In Yii2

Я пробовал этот код в отдельных файлах PHP (за пределами Yii), и он отлично работает.

exec("php process.php > output.php 2>&1 & echo $!", $output); 

Как только я попытался выполнить его в Yii, используя следующее, он не работает.

public function actionIndex() { 
    $url = Url::to(['user/dofile'], TRUE); 
    exec("php $url > testoutput.php 2>&1 & echo $!", $output); 
    return $this->render('index'); 
} 

Ошибка появляется

Could not open input file: http://localhost/weez/frontend/web/index.php?r=user%2Fdofile 

Есть ли способ, чтобы заставить его работать в действиях Yii?

Есть ли альтернативные способы достижения этой цели

Спасибо

ответ

0

Вы не можете выполнить как php $url и ожидать, что PHP разобрать его. попробуйте curl -O $url.

Но лучший вариант для дополнения исходной проблемы («избегать ожидания пользователя»), попробуйте реализовать «очередь».

+0

Спасибо @jovani. Вы имеете в виду использование очереди, как RabbitMQ? – Nabeel

+0

yup. но вы можете попытаться посмотреть на beanstalkd. :) @ Набел – jovani