Codeigniter在后台运行代码

时间:2014-08-19 11:16:46

标签: php codeigniter

我正在开发一个iOS应用程序,我需要调用使用CodeIgniter开发的Web。问题是我很快得到了响应,但后来我需要在CodeIgniter中对它做一些操作。

我怎样才能在后台进行?

我的代码是这样的:

$data = json_decode($response);
echo $response;

//Data has around 100 rows
foreach ($data as $info)
{
     //Database inserts and updates 
}

如果我评论foreach,它的效果很好,但有了它,需要花费很多时间。

我不想加快数据库的速度,因为这不是问题......真正需要时间的是我需要对数据做些什么......

2 个答案:

答案 0 :(得分:0)

您可以通过两种方式解决此问题。

  1. 创建一个cronjob以在main方法中执行耗时的任务,您只需要在发送响应后将作业表的enrty添加到后处理。所以响应不会等到所有处理完成。您还可以根据需要调度cronjob时间,具体取决于后期处理和服务器负载的紧急程度。

  2. 您可以使用CodeIgniter挂钩函数在将响应发送给调用者后进行处理。钩子方法将是" post_system"请在https://ellislab.com/codeigniter/user-guide/general/hooks.html

  3. 了解详情

答案 1 :(得分:0)

您可以尝试以下类似操作

class Proc_test extends CI_Controller
{
    public function index()
    {
        echo "Proc_text::Index is called at ".$this->rightnow()."<br>";
        $param = 5000000;
        $command = "php ".FCPATH."index.php tools proc1 $param > /dev/null &";
        exec($command);
        $command = "php ".FCPATH."index.php tools proc2 $param > /dev/null &";
        echo "Proc_text::Index is done at ".$this->rightnow()."<br>";
    }

    //a helper to give time of day with microseconds
    public function rightnow()
    {
        $time = microtime(true);
        $micro_time = sprintf("%06d", ($time - floor($time)) * 1000000);
        $date = new DateTime(date('Y-m-d H:i:s.'.$micro_time, $time));
        return $date->format("H:i:s.u");
    }
} 

在这里按照以下示例执行后台命令。

$command = "php ".FCPATH."index.php tools proc1 $param > /dev/null &"; 

基本上是遵循此格式的cli命令  “ php绝对/路径/到/codeigniter/index.php控制器方法arguments_1 arguments_2 arguments_n>传递到null语句的管道”。

参考网址:https://forum.codeigniter.com/thread-67870.html