让我们想象一下请求已经完成,持续一段时间,直到它运行,Php是回显内容。要刷新内容,我使用:
echo str_repeat(' ', 99999).str_repeat(' ', 99999); ob_implicit_flush(true);
所以,在处理请求时,我们实际上可以看到输出。 现在我想要一个像#34;停止它的按钮"所以从Php我可以杀死这个过程(我猜的是Apache进程)。怎么样?
答案 0 :(得分:2)
现在我想要一个像"停止它的按钮"所以从Php我可以杀死这个过程
目前还不清楚你在这里问的是什么。通常PHP运行在一个线程中(执行时 - 这里不讨论轻量级进程)。此外,对于任何运行为CGI / FastCGI / mod_php的语言,都没有输入事件 - 来自HTTP通道的输入仅在执行开始时读取一次。
有可能(取决于执行的线程是否经常重新进入PHP解释器)要求PHP以一定间隔运行一个函数(register_tick_function()),这可以轮询通过另一个通道传递的某些事件(例如,设置信号量的不同HTP请求。)
向浏览器发送未定义且可能非常大的长度的流是一个非常糟糕的主意。正确的解决方案(您的示例有点人为)可能是在Web服务器上spawn a background process并通过Ajax轮询输出。你仍然需要实现某种控制通道。
有时,执行的线程会脱离PHP并在那里停留很长时间。在许多情况下,如果用户终止具有长时间运行的数据库查询的PHP脚本,PHP可能会停止运行,但SQL将继续运行直到完成。有解决方案 - 你不知道这是不是问题。