如何在redirect()之后将函数作为后台进程运行?

时间:2012-01-20 16:24:37

标签: codeigniter redirect background-process

我在控制器中有这个:

function foo() {
    // my code
    redirect(site_url('competitor/main'), 'refresh');
    $this->foo2();
}

function foo2() {
    // upload a file
}

如何在使用foo2()方法后保持redirect()运行?

我想在foo2()之后拨打redirect()的原因是因为我想节省上传时间。当用户在site_url('competitor/main')上传文件时,它将转到foo()功能,然后立即重定向回competitor/main页面,foo2()将在后台运行。

2 个答案:

答案 0 :(得分:1)

发送位置标头后,

Codeigniter的redirect()函数exit。因此,在重定向之前调用该函数。

$this->foo2();
redirect('competitor/main', 'refresh');

注意:此处不需要site_url(),如果您使用相对网址,重定向功能会添加它。

我不确定foo2()做了什么,但这看起来有点不确定......

如果由于某种原因你不能这样做,那么用本机PHP发送标题。

header("Refresh:0;url=".site_url('competitor/main')); 
$this->foo2();
exit;

  

当用户在site_url('competitor/main')上传文件时,它将转到foo()功能,然后立即重定向回竞争对手/主页,foo2()将在后台进程中运行。

这可能不是处理上传的方法,因为您无法处理错误。还有其他几种方法可以建议:

  • 上传到其他网址,处理该文件,然后重定向到您选择的网页(如果您愿意,可以显示状态消息)
  • 将您的上传表单发布到<iframe>,这会使页面保持当前状态。
  • 高级:使用javascript通过XMLHttpRequest / AJAX上传文件。 numberscripts available this

答案 1 :(得分:0)

无法保持上传运行并将同一窗口重定向到其他位置。 @Wesley Murch的例子会立即开始刷新,但只有在上传完成后才能完全加载页面,而不会在用户端保存任何时间。

您可以使用shell_exec在后台运行php,但不能上传。我建议使用Javascript为上传创建一个弹出窗口,如果你想让它在后台继续。

否则请尝试Uploadify之类的内容。它不会使上传速度更快,但它会向用户显示清晰的上传进度,并提供良好的体验。