вызов функции в фоновом режиме codeigniter

#php #codeigniter-3

#php #codeigniter-3

Вопрос:

Я хочу отправлять почту в фоновом режиме, у меня есть функция для этого, и она работает нормально, но она блокирует передачу моего сообщения пользователю!

// я попробовал это

 $er=1; 
$outmsg = 'You are now registered,please check your email for verification!';
$this->common_model->partialResponse();
$this->mailer->send_mail($mail,$Mailconfig);
$type = ($er==1) ? "success" : "danger";
echo json_encode(array('msgtype'=>$type,'datacon'=>$outmsg));



function partialResponse()
  {
     $response=array();
     ignore_user_abort(true);
     ob_start();
     echo json_encode($response);
     header("Status: 200");
     header($_SERVER["SERVER_PROTOCOL"] . " 200 Ok");
     header("Content-Type: application/json");
     header('Content-Length: '.ob_get_length());
     ob_end_flush();
     ob_flush();
     flush();
 }
  

Комментарии:

1. почему бы вам не сделать это последним?

2. потому что у меня есть 2 условия: одно для некоторой ошибки, второе для рассылки и, наконец, отправка ошибки throw json ! , но это сообщение не передается в json

3. если я помню, у CodeIgniter есть система очередей для фоновых процессов

4. я не знаю, но знаете ли вы, как использовать эту функцию, потому что я отлично работаю для своих нужд, но проблема в том, что она не передает значение переменной $ outmsg в массив json_encode ..?

Ответ №1:

Недавно я столкнулся с той же проблемой: медленная отправка электронной почты. Использование SMTP еще хуже. 3 ~ 4 секунды для отправки электронной почты.

Сначала я думаю, что мог бы сделать что-то, что вы пытаетесь архивировать, но этот метод может вызвать так много проблем, что оно того не стоило.

В конечном итоге я создаю таблицу электронной почты, чтобы поставить в очередь (и сохранить как историю) все электронные письма, которые могут быть отправлены.

Для обработки этой очереди я создал cronjob для запуска определенного контроллера / метода только для отправки этих электронных писем.