【问题标题】:Php, how to kill the self-request?php,如何杀死自请求?
【发布时间】:2014-09-19 14:08:18
【问题描述】:

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

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

所以,在处理请求时,我们实际上可以看到输出。 现在我想要一个像“停止它”这样的按钮,这样我就可以从 Php 中杀死这个进程(我猜是 Apache 进程)。怎么做?

【问题讨论】:

  • 您可以在浏览器中按cancel 按钮
  • fork 进程并通过 PCNTL (pcntl_fork 和 pcntl_signal) 杀死它不是更好吗?
  • @marfis:你只能在 CLI API 中分叉。
  • @symcbean:啊,有道理,从来没有尝试过... ;)
  • @hex2mgl 进程本身仍在继续运行......

标签: php apache process


【解决方案1】:

现在我想要一个像“停止它”这样的按钮,这样我就可以从 Php 中终止这个进程

不清楚你在这里问什么。通常 PHP 在单个线程中运行(执行即 - 这里不讨论轻量级进程)。此外,对于任何作为 CGI/FastCGI/mod_php 运行的语言,都没有输入事件 - 来自 HTTP 通道的输入仅在执行开始时读取一次。

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

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

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

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2011-08-11
    • 2013-07-24
    相关资源
    最近更新 更多