将另一个kohana方法称为后台任务

时间:2013-11-05 05:28:20

标签: exec kohana background-process

如何在Kohana 3中使用控制器的action_index方法并使用类似代码的方法

 exec("php index.php --uri=home/other_method");

...在后台运行'other_method'?我在'home / index'并且想要将'home / other_method'称为后台任务。我不想等待网页回复,'other_method'最多可能需要3分钟才能完成。

我不想使用队列,我想在没有Minion的情况下这样做。

这可能吗?无论我尝试什么,我都无法得到'other_method'甚至回应。我可以直接访问它,我甚至可以在服务器上使用CRON作业来调用我的exec()代码。

为什么我不能在action_index中通过exec()访问它? 是否有另一种方法使用kohana线程调用'other_method'以便我可以继续使用action_index?

(另外,我使用MAMP在Mac上编码。也许它与环境有关?)

1 个答案:

答案 0 :(得分:1)

  • home/other_method控制器的顶部,脚本不要停止设置:

    ignore_user_abort(true);
    set_time_limit(0);
    
  • 创建流上下文,将其超时配置为短时间段,并且在达到超时时不产生异常:

    $context = stream_create_context(array(
        'http'=>array(
            'timeout' => 1.0, // Set timeout to 1 second
            'ignore_errors' => true // Don't prouce Exception
        )
    ));
    
  • (假设您的home/other_method网址为http://localhost/other_method)使用创建的上下文调用您的网址:

    $kick = file_get_contents(`'http://localhost/other_method'`, false, $context);
    

达到超时后,file_get_contents()会停止返回空字符串,但您的请求将在后台继续,直到结束。

小心多次调用'http://localhost/other_method',所有这些请求将同时运行。

您可以使用Kohana的Request_Client_External类和CURL创建类似的东西。