【发布时间】:2013-11-07 16:12:55
【问题描述】:
我有一个聊天机器人,它将一些数据保存到用户发送的数据库中。在向用户发送响应后,我想将其保存到 db(一个缓慢的网络调用)。
我可以在 Python Tornado 中做到这一点,但我无法在 PHP Apache 中做到这一点。
用户将输入作为请求发送 -> 我们对其进行处理 -> 我们将输出作为响应发送给用户 -> 然后我们希望存储数据
class A
{
function __construct()
{
echo "Hello World";
}
function __destruct()
{
sleep(15); //I want this to happen after response is being send
}
function calc()
{
echo "Progress World";
}
}
【问题讨论】:
-
你现在有什么问题?类有一个神奇的方法
__destruct()。 -
响应发送后是否调用了 __destruct()?
-
发送后是否处理某些内容仅取决于您之后是否终止脚本。无论如何:为此使用输出缓冲。那么当存储数据失败时你仍然可以做出反应。
-
@arkascha 代码在 index.php 中,所以我认为它是由 apache 在响应后由 apache 终止的请求 n 调用的。不是吗?
-
为什么http服务器会因为你发送了一些数据而突然自发地杀死你的php脚本?不!脚本将继续运行,只有两个例外:1. 您明确停止执行(例如通过在代码中使用
return语句)或 2. 当您指定响应长度时,发送响应和 client 断开连接。在这种情况下,您仍然可以使用 phpsignore_client_abort()函数运行您的脚本。但如前所述:在我看来,输出缓冲在这里是有意义的。生成响应并仅在所有操作完成后发送。
标签: php apache optimization exit