我有 2 个函数,让我们称它们为 login 和 doSomething,目前,我以这种方式实现它们,
$member=$this->login();
$this->doSomething($member);
显示欢迎页面 当用户登录时,我想做一些事情,但大约需要 20 秒或更长时间才能完成。有什么方法可以在运行 login(( 后,它会在单独执行方法 doSomething(( 时立即显示欢迎页面。方法doSomething((不返回任何值,因此不会影响欢迎页面。
请尝试以下操作。
ob_start();
$member = $this->login();
ob_end_flush();
ob_flush();
flush();
$this->doSomething($member);
如果您不想在登录后打印任何内容,您可以使用:
ob_start();
$this->doSomething($member);
ob_end_clean();
同样从前台站点的登录页面使用 Ajax(加载后(,您可以开始处理 $this->做某事($member(; 在后端的另一个Ajax呼叫中默默地。
还有其他方法可以实现线程,类似于伪线程的行为。 但这些是最简单的场景:)
您也可以检查工作线程。 他们的实现示例文档可在网络上找到。
如果你真的,真的想并行运行它,那么你需要在sperate进程中运行它。这意味着你在不同的范围内运行它,所以虽然你调用的代码可能包含$this->doSomething($member)
,但那个"this"不会是这个"this"。
假设这是可能的,那么你的问题就是这个问题的副本(但要注意 - 接受的答案不好(。请注意,如果脚本的两个部分都依赖于会话,则会遇到阻塞问题。