1

嘿,我见过人们推荐他们每个人,一个校准的 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"); 
?>

它会比我所说的任何功能更好吗?

4

2 回答 2

1

ignore_user_abort() 告诉 PHP/Apache 在用户断开连接时不要终止执行。register_shutdown_function 只允许您在 PHP 处于关闭过程中时进行一些清理。

register_shut_down 仅在您需要进行一些 PHP 的正常关闭例程无法处理的清理操作时才有用,例如删除手动创建的锁定文件、在某处的数据库记录中翻转位等...

于 2012-05-13T16:32:24.303 回答
0

在旧版本的 PHP 中(在 Apache 下 <4.1.0), register_shutdown_function() 将确保在您的关闭函数运行之前关闭连接。这已不再是这种情况。如果您没有打开任何输出缓冲区,您编辑中的 endOutput() 函数确实应该执行您想要的操作。但是,它确实将脚本设置为能够在必要时永久运行,如果它进入无限循环(尤其是在调试期间),这可能会很烦人。您可能希望更改 set_time_limit() 以使用实际反映脚本应该花费多少秒的值。

如果您不需要它,最好避免使用 register_shutdown_function(),因为它还有一些其他奇怪的行为(例如,如果第一个关闭函数调用 exit(),则无法添加第二层关闭函数来运行)。

于 2012-05-13T16:39:40.180 回答