嘿,我见过人们推荐他们每个人,其中一个人认为register_shutdown_function更好但没有探索。
我在谈论哪个更好地发送回复并仍然执行其他任务。 我想到了什么是更好的方法和原因。
修改 在register_shutdown_function文档中,有人发布了以下方法:
<?php
function endOutput($endMessage){
ignore_user_abort(true);
set_time_limit(0);
header("Connection: close");
header("Content-Length: ".strlen($endMessage));
echo $endMessage;
echo str_repeat("\r\n", 10); // just to be sure
flush();
}
// Must be called before any output
endOutput("thank you for visiting, have a nice day');
sleep(100);
mail("you@yourmail.com", "ping", "im here");
?>
它能比我说的任何功能更好吗?
答案 0 :(得分:1)
ignore_user_abort()告诉PHP / Apache在用户断开连接时不终止执行。 register_shutdown_function只允许你在PHP正在关闭的过程中进行一些清理。
register_shut_down仅在您需要进行一些PHP正常关机例程不需要处理的清理时才有用,例如:删除手动创建的锁定文件,在某处的DB记录中翻转一下等等......
答案 1 :(得分:0)
在旧版本的PHP(Apache下的&lt; 4.1.0)中,register_shutdown_function()将确保在关闭函数运行之前关闭连接。这已不再是这种情况。如果您没有打开任何输出缓冲区,编辑中的endOutput()函数应该确实可以执行您想要的操作。虽然,它确实将脚本设置为能够在必要时永久运行,如果它进入无限循环(特别是在调试期间),这可能会很烦人。您可能希望更改set_time_limit()以使用实际反映脚本应该花费多少秒的值。
如果你不需要,最好避免使用register_shutdown_function(),因为它有一些其他奇怪的行为(例如,如果第一个关闭函数调用exit,则无法添加第二层关闭函数来运行( ))。