【问题标题】:Continue PHP in background (after closing connection to client) PHP7(!)在后台继续 PHP(关闭与客户端的连接后) PHP7(!)
【发布时间】:2018-03-16 16:36:40
【问题描述】:

我知道这个话题已经被讨论过很多次了,但是关于 SO 的解决方案似乎都不适用于 PHP 7.x(例如,close a connection early 中的任何东西都不起作用。对于类似的所有类似答案也是如此问题)。

我想提前关闭一个 php 脚本的连接,这样浏览器就不会因为长时间运行的任务而停止。我有一个 PHP 5.x 服务器设置,多年来一直运行良好。但我很难让它在 PHP 7.x 设置上工作。

我不能使用 fastcgi_finish_request(),因为我没有使用 FastCGI 运行 PHP。此外,任何面向命令行的解决方案(exec 等)都不是一种选择。此外,线程不是一个选项,因为 pthread 没有安装在服务器上。

经过长时间的测试,我发现对于 PHP 5.x,要在继续执行脚本的同时正确关闭连接,需要不同的“配方”,具体取决于服务器配置。对于某些服务器来说,这可以解决问题

header("Content-Length: 0");
ob_end_clean();
ob_end_flush();
echo(' ');

其他配置只需要这样做即可:

header("Content-Encoding: none");
header("Content-Length: 0");
flush();

但是,对于 PHP 7.x,我没能想出正确的“秘诀”。

有谁有更多的运气或可以提出不同的解决方案吗?

【问题讨论】:

    标签: php background php-7


    【解决方案1】:

    你可以试试 register_shutdown_function()。当你想关闭用户连接时调用这个函数,即你的代码的最后一条语句。

    <?php
    function shutdown()
    {
        // This is our shutdown function, in 
        // here we can do any last operations
        // before the script is complete.
    
        echo 'Script executed with success', PHP_EOL;
    }
    
    register_shutdown_function('shutdown');
    ?>
    

    【讨论】:

    • 这并不能解决我需要关闭连接然后做后台工作的技巧。
    猜你喜欢
    • 1970-01-01
    • 2013-04-24
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2018-12-16
    • 1970-01-01
    • 2020-02-10
    相关资源
    最近更新 更多