如何在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上编码。也许它与环境有关?)
答案 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创建类似的东西。