php – 重定向但仍继续处理exec()

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 重定向但仍继续处理exec()脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
代码示例应该重定向并继续处理长操作,但是在exec命令完成之后它才会重定向.我已经尝试了多种其他方法做到一点并没有任何效果.我哪里错了?

我的PHP.ini中启用了ignore_user_abort()

<?PHP
set_time_limIT ( 0 );
header ( 'Connection: close' );
ob_start ();
header ( 'Content-Length: 0' );
header ( 'Location: /redirect.PHP' );
ob_end_flush ();
flush ();
ignore_user_abort ( true );

exec('command that takes 5 minutes to PRocess');
exit ();
?>

我提前感谢你的帮助.

解决方法

我最近不得不写@L_360_9@webhook处理程序,它应该在继续处理其他长时间运行的任务之前立即返回“200 OK”响应.

我观察到,当我使用相同的Web服务器进行整个过程时,立即挂起的过程是不可能的.因此,如果您需要发送响应的连接的客户端IP与服务器IP相同,则可能永远无法执行此操作.但是,当传入的连接是真实世界的远程客户端时,它始终有效.

尽管如此,我只是回复了“200 OK”的回复.这与发送重定向不同.

我有用的代码是……

public function respondASAP($responseCode = 200)
{
    // check if fastcgi_finish_request is callable
    if (is_callable('fastcgi_finish_request')) {
        /*
         * This works in Nginx but the next approach not
         */
        session_write_close();
        fastcgi_finish_request();

        return;
    }

    ignore_user_abort(true);

    ob_start();
    http_response_code($responseCode);
    header('Content-Encoding: none');
    header('Content-Length: '.ob_get_length());
    header('Connection: close');

    ob_end_flush();
    ob_flush();
    flush();
}

您可以根据您的情况调整它,并使其设置重定向标题而不是“200 OK”.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 重定向但仍继续处理exec()全部内容,希望文章能够帮你解决php – 重定向但仍继续处理exec()所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。