博士,如何杀死自己的请求


Php, how to kill the self-request?

让我们想象一个请求已经完成,它会持续一段时间,直到它运行,Php会回显内容。为了清除内容,我使用:

echo str_repeat(' ', 99999).str_repeat(' ', 99999); ob_implicit_flush(true);

因此,在处理请求时,我们实际上可以看到一个输出。现在我想要一个像"停止它"这样的按钮,这样我就可以从Php中杀死这个进程(我想是Apache进程)。如何?

现在我想有一个像"停止它"这样的按钮,这样从Php我可以杀死这个过程

你在这里问什么还不清楚。通常,PHP在一个线程中运行(执行的线程,这里不是指轻量级进程)。此外,对于任何以CGI/FastCGI/mod_php运行的语言,都没有输入事件——从HTTP通道输入的信息在执行时只读取一次。

可以(取决于执行线程是否定期重新进入PHP解释器)要求PHP每隔一段时间运行一个函数(register_tick_function()),该函数可以轮询通过另一个通道传递的某个事件(例如,设置信号量的不同HTP请求)。

向浏览器发送一个未定义且可能非常长的流是一个非常糟糕的主意。正确的解决方案(您的示例有些做作)可能是在Web服务器上生成一个后台进程,并通过Ajax轮询输出。不过,您仍然需要实现某种控制通道。

有时执行线程会离开PHP并在那里停留很长时间。在许多情况下,如果用户终止了一个有长时间运行的数据库查询的PHP脚本,PHP可能会停止运行,但SQL会一直运行到完成。有解决方案,但你没有说这是否是问题所在。