我可以从CodeIgniter调用一个shell脚本,然后调用一个codeigniter控制器函数吗?

时间:2013-03-12 18:31:59

标签: php codeigniter shell

我有点像新手 我正在Codeigniter写一个社交应用程序。一旦用户登录,就必须做很多事情来准备用户网络,发送电子邮件,创建推荐朋友列表等。 我们已经编写了各种功能来完成这些功能。

让我们说主控制器索引具有SignUp功能。

注册后,我们希望将用户重定向到Dashboard控制器,但在后台,我们要运行

  1. BuildNetwork
  2. FindMatches
  3. 发送电子邮件
  4. 我不知道如何在后台运行任何任务。所以我想也许我可以编写一个一个接一个地调用这些函数的shell脚本 我们将通过Codeigniter调用此脚本并传递UserId 然后,此脚本将调用各个函数并将userId传递给那些函数。

    任何人都可以告诉我

    1. 如果这是正确的方法
    2. 如何完成(以这种方式或以任何其他方式)

1 个答案:

答案 0 :(得分:2)

我建议您使用队列系统,检查beanstalk(以及PHP库pheanstalk)之类的内容。

然后,您可以在队列中为每个要执行的操作添加一个作业,然后在后台进程(可能是cron)中,您将获取作业并运行它们。

http://kr.github.com/beanstalkd/ https://github.com/pda/pheanstalk/

因此,在您的SignUp函数中,您将创建一个作业并放入队列,您可以为每个不同类型的作业使用队列,然后为每个队列设置一个作业使用者。

// some pseudo code

function signUp()
{
    $jobData = json_encode(array(
        'template' => 'newUser',
        'to'       => 'john@example.com'
    ));
    $this->pheanstalk->useTube('OutboundEmails')->put($jobData);

    // add other jobs for other tasks here too
}

然后你可以拥有运行你的消费者脚本的cron脚本。

// pseudo for this mail consumer

$pheanstalk->watch('OutboundEmails')->ignore('default');

while ($job = $pheanstalk->reserve())
{
    // send the email using the data in the job
    $job->getData() // returns your JSON
}

希望有所帮助。